0

次のクエリを実行すると、結果は下のスクリーンショットのようになります。

DECLARE @numArray VARCHAR(50) = '[1,2,45,1,21,45,32,564,48,56,98,87]';

SELECT  value AS Number  FROM OPENJSON(@numArray)

ここに画像の説明を入力

逆にそれが可能かどうか興味がありました。つまり、次のようなクエリがあるとします。

Select Number from Table_name

[1,2,45,1,21,45,32,564,48,56,98,87] のような結果が得られるはずです。

使用してみFor JSON ましたが、JSON配列を返すだけです。(int配列ではありません)

今では他にも方法があることを知り、私もそれを実行しました。しかし、Sql Server JSON 関数を使用してこれを行う方法はありますか?

ありがとうございました

編集: 現在、すべての行を連結するためにものを使用してこれを行っています。しかし、そうするようなことがあるかどうか知りたいですFOR JSON PATH

4

2 に答える 2

1

このコードはあなたを助けるかもしれません、以下はサンプルデータです

IF OBJECT_ID('tempdb..#SampleData') IS NOT NULL
DROP TABLE #SampleData
;WITH Cte( SapmleData )
AS
(
SELECT 1    UNION ALL
SELECT 2    UNION ALL
SELECT 45   UNION ALL
SELECT 1    UNION ALL
SELECT 21   UNION ALL
SELECT 45   UNION ALL
SELECT 32   UNION ALL
SELECT 564  UNION ALL
SELECT 48   UNION ALL
SELECT 56   UNION ALL
SELECT 98   UNION ALL
SELECT 87   
)
SELECT * INTO #SampleData FROM Cte

SELECT * FROM #SampleData

SQL Server での stuff() の使用

SELECT '['+STUFF((SELECT DISTINCT ','+ CAST(SapmleData AS VARCHAR(10))   FROM #SampleData
FOR XML PATH ('')),1,1,'') +']' AS Expectedcolumn   

SapmleData
----------
1
2
45
1
21
45
32
564
48
56
98
87

Expectedcolumn
----------------
[1,2,21,32,45,48,56,564,87,98]
于 2018-01-16T11:04:22.777 に答える
0

XML を使用してみてください。このような

;WITH CTE
AS
(
    SELECT
       Val = 1

    UNION ALL

    SELECT
       Val = Val+1
       FROM CTE
          WHERE Val < 10
)
SELECT
    List = '['+SUBSTRING(List,1,LEN(List)-1)+']'
    FROM 
    (
       SELECT
         CAST(Val AS VARCHAR(20))+',' as [text()]
       FROM CTE
       FOR XML PATH('')
    )L(List)
于 2018-01-16T11:51:14.860 に答える