Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

tabel SQL Server ke json

Saya tidak akan menyarankannya, ada banyak cara yang lebih baik untuk melakukan ini di lapisan aplikasi, tetapi yang berikut ini menghindari loop, dan jauh lebih sedikit verbose daripada metode Anda saat ini:

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. Saya telah mengubah nama objek dua bagian Anda (@schema dan @table) menjadi hanya menerima nama objek lengkap.

Contoh pada SQL Fiddle

Idenya adalah pada dasarnya menggunakan ekstensi XML dalam SQL-Server untuk mengubah tabel menjadi XML, lalu ganti tag awal dengan {ColumnName: dan tag akhir dengan , . Kemudian membutuhkan dua penggantian lagi untuk berhenti menambahkan kurung tutup ke kolom terakhir dari setiap baris, dan menghapus , terakhir dari string 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. Lakukan regex (ganti) dalam kueri SQL

  2. memigrasikan data dari MS SQL ke PostgreSQL?

  3. Cara Membuat Daftar Fitur Usang dalam Instance SQL Server menggunakan T-SQL

  4. SQL Server BCP mengekspor file yang rusak?

  5. Ekstrak URL dari situs web?