Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Таблица на SQL Server към 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

N.B. Промених вашето име на обект от две части (@schema и @table), за да приема само пълното име на обекта.

Пример за SQL Fiddle

Идеята е основно да се използва XML разширението в SQL-Server, за да се превърне таблицата в XML, след което просто да се заменят началните тагове с {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. T-SQL:проверка за имейл формат

  2. TDS сървър - Използвайте Transact-SQL (T-SQL) изявления за работа с данни на Salesforce в SQL Server

  3. ClassNotFoundException - com.microsoft.jdbc.sqlserver.SQLServerDriver

  4. Бърза помощ при използване на RANK върху множество променливи

  5. Как да добавя персонализирани атрибути към SQL низ за връзка?