我必須與接受 JSON 訊息的網路服務交談,但它基于動態原則。因此,如果想要基于名稱\值屬性的動態構建,而不是使用固定定義的欄位。
有限元
{
"Begin": [
{
"name": "sysrscols",
"value": "sysrscols"
},
{
"name": "id",
"value": "3"
},
{
"name": "crdate",
"value": "2013-03-22T15:06:57.220"
}
]
}
在 SQL 中使用 FOR JSON 選項,我得到一個包含列名及其值的結果。鐵查詢:
SELECT TOP 1 so.name,so.id,so.crdate From sysobjects so FOR JSON PATH, Root('Begin')
結果給出:
{
"Begin": [
{
"name": "sysrscols",
"id": 3,
"crdate": "2013-03-22T15:06:57.220"
}
]
}
我怎樣才能達到第一個結果?
uj5u.com熱心網友回復:
您需要在此處取消透視資料,然后使用FOR JSON. 我在這里使用了一個骯臟的解決方案并將值轉換為sql_variant; 我建議你就不會做這樣。取而代之CONVERT的是 a 的值,(n)varchar并在需要的地方使用適當的樣式代碼來獲得所需的“格式”。
我還將您的代碼引入 2000 年代中期,因為sys.sysobjects系統視圖是 SQL Server 2000 的兼容性視圖(如檔案中所述)。現在是 2021 年,我覺得您已經很久沒有開始使用“新”系統物件了:
SELECT V.name,
V.value
FROM sys.objects so
CROSS APPLY (VALUES(CONVERT(sql_variant,so.name),N'name'),
(CONVERT(sql_variant,so.object_id),N'object_id'),
(CONVERT(sql_variant,so.create_date), N'createdate'))V([value],[name])
WHERE so.[name] = 'SomeView' --This would be the object you want
FOR JSON PATH, ROOT('Begin');
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/348714.html
