sql >> Databáze >  >> RDS >> Sqlserver

SQL Server tabulka na json

Opravdu bych to nedoporučoval, v aplikační vrstvě existují mnohem lepší způsoby, jak toho dosáhnout, ale následující postup zabraňuje zacyklení a je mnohem méně podrobný než vaše současná metoda:

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. Změnil jsem váš dvoudílný název objektu (@schéma a @tabulka), aby přijímal pouze celý název objektu.

Příklad na SQL Fiddle

Záměrem je v zásadě použít rozšíření XML v rámci SQL-Serveru k převedení tabulky na XML, pak stačí nahradit počáteční značky {ColumnName: a koncové značky s , . Poté vyžaduje další dvě nahrazení, aby se zastavilo přidání uzavírací závorky do posledního sloupce každého řádku a odstranění posledního , z řetězce JSON.



  1. Příkaz WHERE po UNION v SQL?

  2. MYSQL, pokud výběrový dotaz vrátí 0 řádků, pak jiný výběrový dotaz?

  3. Jak sloučit pole dohromady a zobrazit výstup v php a sql

  4. Vyhledání nejnovější smlouvy pro každý účet