我正試圖將SQL Server的結果轉換為雙重嵌套的JSON格式。
源SQL服務器表:
| ID | 姓名 | 程式型別 | 科室 | 主任專案 | 高級經理 | 。PCM | 承包商 | 成本客戶
|---|---|---|---|---|---|---|---|
| 123 | abc | QEWddgnhghj | gghgh | gghgh | 456 | gdffgf | ghgf | jkjlkllrtyuui
轉換為雙倍的JSON,如圖所示:
[
[
{"key":"ID","value":"123"},
{"key":"Name","value":"abc"},
{"key":"Program","value":"qew"},
{"key":"Type","value":"tyu"},
{"key":"Section","value":"dd"},
{"鍵": "主任", "值": "ghghjg"},
{"key":"Project","value":"hkhjk"},
{"鍵": "高級經理", "值": "fghfgf"},
{"key":"PCM","value":"gnhghj"},
{"鍵": "承包商", "值": "ghgh"},
],
[
{"key":"ID","value":"456"},
{"key":"Name","value":"yui"},
{"鍵": "程式", "值": "gdffgf"},
{"鍵": "型別", "值": "ghgfjhj"},
{"key": "Section", "value": "jkjlkll"},
{"key":"Director","value":"uiop"},
{"鍵": "專案", "值": "rtyuui"},
{"key":"Sr Manager","value":"rfv"},
{"key":"PCM","value":"ujmk"},
{"鍵": "承包商", "值": "rfvtg"},
{"key": "Cost Client", "value": "efgg"}, {"key": "Cost Client", "value": "efgg"}.
]
]
如果能得到任何幫助,我們將不勝感激。
編輯。 我從這個問題開始,重寫了 "FOR JSON AUTO",這樣我就可以以某種方式添加 "Key""Value "文本。 但由于我的表在列名中有空格,FOR XML PATH('')給出了FOR XML所要求的無效的XML識別符號。 這時我想到了尋求社區的幫助。
Create PROCEDURE [dbo]. [GetSQLtoJSON] @TableName VARCHAR(255)
AS
BEGIN[/span
如果OBJECT_ID(@TableName) IS NULL[/span
BEGIN[/span
SELECT Json = ''/span>;
RETURN;
END。
DECLARE @SQL NVARCHAR(MAX) = N'SELECT * INTO ##T '
'FROM ' @TableName;
EXECUTE SP_EXECUTESQL @SQL;
DECLARE @X NVARCHAR(MAX) = '['/span> (SELECT * FROM ##T FOR XML PATH(' '/span>) ']'。
SELECT @X = REPLACE(@X, '< ' Name '> ' ,
CASE WHEN ROW_NUMBER() OVER( ORDER BY Column_ID) = 1 THEN '{'/span>
ELSE '' END Name ' :')。)
@X = REPLACE(@X, ' < /' Name '> ', ', ')。
@X = REPLACE(@X, ',{', '}, {') 。
@X = REPLACE(@X, ',] ', '}] ')
FROM sys.columns
WHERE [Object_ID] = OBJECT_ID(@TableName)
ORDER BY Column_ID。
DROP TABLE ##T;
SELECT Json = @X;
END
示例資料:
CREATE TABLE [dbo]. [Test1](
[ID] [int] IDENTITY(1, 1) NOT NULL,
[Col1] [int] NOT NULL,
[Col 2] varchar(50)
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo]. [Test1] ON
去
INSERT [dbo]. [Test1] ([ID], [Col1], [Col 2]) VALUES (1, 0, 'ABCD')
去
INSERT [dbo]. [Test1] ([ID], [Col1] , [Col 2]) VALUES (2, 1, 'POIU')。
去
SET IDENTITY_INSERT [dbo].[Test1] OFF
啟用
uj5u.com熱心網友回復:
首先,檢查這個鏈接,你可以找到你想要的東西
。format-query-results-as-json-with-for-json-sql-server
但在你的情況下,你可以嘗試這樣做
SELECT
ID,姓名,專案,型別,部門。
主任,專案,高級經理,PCM,承包商,成本,客戶
FROM table
FOR JSON AUTO;
查看鏈接,那里有更多的樣本,所以它可以幫助你
。uj5u.com熱心網友回復:
你可以使用以下代碼:
- 在一個
APPLY中,將列作為鍵/值對解開... - ...并使用
FOR JSON PATH聚合。
- 使用
STRING_AGG來做另一個聚合。
SELECT '['/span> STRING_AGG(CAST(v. json AS nvarchar(max)), ', ') ']')
FROM T
CROSS APPLY (
SELECT *
FROM (VALUES)
('ID', CAST(ID AS nvarchar(100) )。
('Name', Name)。
('Program', Program)。
('Type', [Type])。
('Section', Section)。
('Director', Director)。
('Project', 專案)。
('Sr Manager', [Sr Manager]) 。
('PCM', PCM)。
('Contractor', Contractor),
('Cost Client', [Cost Client])
) v([key], value)
FOR JSON PATH
) v(json)
你不能再使用FOR JSON,因為那樣你會得到["json": [{"key" : ...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/311047.html
標籤:
上一篇:基于子查詢的SQL更新
