目標: 我想更新我的 SQL 表 [dbo.properties] 中的現有條目。SQL 命令在 PHP 中執行。PHP 檔案再次接收一個陣列,作為新的資料源。此陣列包含唯一ID、propertyName和實際值。
問題: 如何在 SQL 中回圈遍歷陣列并確保在正確的點更新值?
我的 SQL 表如下所示:
[id] as [int] increments by DB
[property] as [varchar(50)]
[value] as [varchar(50)]
傳遞的陣列如下所示:
0: Object {id:'30', property:'sugar', value:'20g'}
1: Object {id:'37', property:'salt', value:'10g'}
2: Object {id:'38', property:'chocolate', value:'120g'}
我知道如何使用單個資料或使用串列洗掉多個值。但是我很難為我的案例找到類似的東西。特別是因為我需要在一個查詢中更新所有內容并且行數是動態的。意味著可能只有一項更新或 10 項。
偽 SQL 查詢以更好地理解
BEGIN TRANSACTION [updateProperties]
BEGIN TRY
UPDATE properties SET
// Somehow iterate through array
property = ('array[Pos][Entry1]'),
value = ('array[Pos][Entry2]')
WHERE id = ('array[Pos][Entry0]')
COMMIT TRANSACTION [updateProperties]
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION [updateProperties]
END CATCH;
uj5u.com熱心網友回復:
如果您將其作為適當的 JSON 陣列傳入,則可以使用OPENJSON加入到您的表中
DECLARE @json nvarchar(max) = N'[
{"id":30, "property":"sugar", "value":"20g"},
{"id":37, "property":"salt", "value":"10g"},
{"id":38, "property":"chocolate", "value":"120g"}
]';
UPDATE p
SET property = j.property,
value = j.value
FROM properties p
JOIN OPENJSON(@json)
WITH (
id int,
[property] varchar(50),
[value] varchar(50)
) j ON j.id = p.id;
MERGE如果要更新現有行并插入新行,則可以使用。
附帶說明一下,我建議您不要存盤value為varchar. 相反,將其拆分為amount和unit。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/329766.html
標籤:sql 数组 sql-server
上一篇:SQLServerINSERTINTO同時避免2個連接值重復
下一篇:每個提供的ID獲取特定數量的記錄
