1. 程式人生 > >SQL SERVER 資料匯出JSON

SQL SERVER 資料匯出JSON

原文:https://www.cnblogs.com/hank-chen/p/5916929.html

執行下面的儲存過程:

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE PROCEDURE[dbo].[SerializeJSON](

@ParameterSQL AS VARCHAR(MAX)

)

AS

BEGIN

  

DECLARE @SQL NVARCHAR(MAX)

DECLARE @XMLString VARCHAR(MAX)

DECLARE @XML XML

DECLARE @Paramlist NVARCHAR(1000)

SET @Paramlist = N'@XML XML OUTPUT'

SET @SQL = 'WITH PrepareTable (XMLString)'

SET @SQL = @SQL + 'AS('

SET @SQL = @SQL + @ParameterSQL+ 'FOR XML RAW,TYPE,ELEMENTS'

SET @SQL = @SQL + ')'

SET @SQL = @SQL + 'SELECT @XML=[XMLString]FROM[PrepareTable]'

EXEC sp_executesql @SQL, @Paramlist, @[email protected] OUTPUT

SET @XMLString=CAST(@XML AS VARCHAR(MAX))

  

DECLARE @JSON VARCHAR(MAX)

DECLARE @Row VARCHAR(MAX)

DECLARE @RowStart INT

DECLARE @RowEnd INT

DECLARE @FieldStart INT

DECLARE @FieldEnd INT

DECLARE @KEY VARCHAR(MAX)

DECLARE @Value VARCHAR(MAX)

  

DECLARE @StartRoot VARCHAR(100);SET @StartRoot='<row>'

DECLARE @EndRoot VARCHAR(100);SET @EndRoot='</row>'

DECLARE @StartField VARCHAR(100);SET @StartField='<'

DECLARE @EndField VARCHAR(100);SET @EndField='>'

  

SET @RowStart=CharIndex(@StartRoot,@XMLString,0)

SET @JSON=''

WHILE @RowStart>0

BEGIN

    SET @[email protected]+Len(@StartRoot)

    SET @RowEnd=CharIndex(@EndRoot,@XMLString,@RowStart)

    SET @Row=SubString(@XMLString,@RowStart,@[email protected])

    SET @[email protected]+'{'

  

    -- for each row

    SET @FieldStart=CharIndex(@StartField,@Row,0)

    WHILE @FieldStart>0

    BEGIN

        -- parse node key

        SET @[email protected]+Len(@StartField)

        SET @FieldEnd=CharIndex(@EndField,@Row,@FieldStart)

        SET @KEY=SubString(@Row,@FieldStart,@[email protected])

        SET @[email protected]+'"'[email protected]+'":'

        -- parse node value

        SET @[email protected]+1

        SET @FieldEnd=CharIndex('</',@Row,@FieldStart)

        SET @Value=SubString(@Row,@FieldStart,@[email protected])

        SET @[email protected]+'"'[email protected]+'",'

  

        SET @[email protected]+Len(@StartField)

        SET @FieldEnd=CharIndex(@EndField,@Row,@FieldStart)

        SET @FieldStart=CharIndex(@StartField,@Row,@FieldEnd)

    END   

    IF LEN(@JSON)>0SET @JSON=SubString(@JSON,0,LEN(@JSON))

    SET @[email protected]+'},'

    --/ for each row

  

    SET @RowStart=CharIndex(@StartRoot,@XMLString,@RowEnd)

END

IF LEN(@JSON)>0SET @JSON=SubString(@JSON,0,LEN(@JSON))

SET @JSON='['[email protected]+']'

SELECT @JSON

  

END

GO

 

 

執行下面的指令碼就能生成JSON格式資料

EXEC[SerializeJSON] 'SELECT * FROM [dbo].[TEST]'