以多维数组作为源更新SQL行



目标:我想更新SQL表[dbo.properties]中的现有条目。SQL命令在PHP中执行。PHP文件再次接收一个数组,作为新的数据源。此数组包含唯一的IDpropertyName和实际的

问题:在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;

如果将其作为一个适当的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。相反,将其拆分为amountunit

相关内容

  • 没有找到相关文章

最新更新