Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर तालिका json . के लिए

मैं वास्तव में इसकी सलाह नहीं दूंगा, एप्लिकेशन परत में ऐसा करने के बहुत बेहतर तरीके हैं, लेकिन निम्नलिखित लूप से बचा जाता है, और आपकी वर्तमान विधि की तुलना में बहुत कम वर्बोज़ है:

CREATE PROCEDURE dbo.GetJSON @ObjectName VARCHAR(255), @registries_per_request smallint = null
AS
BEGIN
    IF OBJECT_ID(@ObjectName) IS NULL
        BEGIN
            SELECT Json = '';
            RETURN
        END;

    DECLARE @Top NVARCHAR(20) = CASE WHEN @registries_per_request IS NOT NULL 
                                    THEN 'TOP (' + CAST(@registries_per_request AS NVARCHAR) + ') ' 
                                    ELSE '' 
                                END;

    DECLARE @SQL NVARCHAR(MAX) = N'SELECT ' + @Top + '* INTO ##T ' + 
                                'FROM ' + @ObjectName;

    EXECUTE SP_EXECUTESQL @SQL;

    DECLARE @X NVARCHAR(MAX) = '[' + (SELECT * FROM ##T FOR XML PATH('')) + ']';


    SELECT  @X = REPLACE(@X, '<' + Name + '>', 
                    CASE WHEN ROW_NUMBER() OVER(ORDER BY Column_ID) = 1 THEN '{'
                         ELSE '' END + Name + ':'),
            @X = REPLACE(@X, '</' + Name + '>', ','),
            @X = REPLACE(@X, ',{', '}, {'),
            @X = REPLACE(@X, ',]', '}]')
    FROM    sys.columns
    WHERE   [Object_ID] = OBJECT_ID(@ObjectName)
    ORDER BY Column_ID;

    DROP TABLE ##T;

    SELECT  Json = @X;

END

एन.बी. मैंने आपके दो भाग ऑब्जेक्ट नाम (@schema और @table) को केवल पूर्ण ऑब्जेक्ट नाम स्वीकार करने के लिए बदल दिया है।

SQL Fiddle पर उदाहरण

तालिका को एक्सएमएल में बदलने के लिए मूल रूप से एसक्यूएल-सर्वर के भीतर एक्सएमएल एक्सटेंशन का उपयोग करने का विचार है, फिर बस स्टार्ट टैग को {ColumnName: से बदलें। और अंत टैग , . के साथ . इसके बाद इसे रोकने के लिए दो और प्रतिस्थापनों की आवश्यकता होती है, प्रत्येक पंक्ति के अंतिम कॉलम में क्लोजिंग ब्रैकेट जोड़ना, और अंतिम , को हटाना। JSON स्ट्रिंग से।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2008 में लेन-देन लॉग कैसे देखें?

  2. SQL सर्वर में डेटाबेस स्कीमा का उपयोग करना

  3. SQL सर्वर डेटाबेस में सभी चेक बाधाओं को कैसे अक्षम करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 87

  4. SQL डेटाबेस तालिका में डेटाटाइम कैसे सम्मिलित करें?

  5. SQL सर्वर परिणाम सेट में पंक्तियों को कैसे सीमित करें