我从客户端收到了一个有效的JSON字符串,它包含一个整数值数组:
declare @JSON nvarchar(max) = N'{"Comments": "test", "Markets": [3, 151]}'
如何正确选择市场ID?
如果我使用以下查询:select * from openjson(@JSON) j
,它会返回
select j.Markets from openjson(@JSON) with(Markets nvarchar(max)) j
我的目标是根据这些ID更新“Market”表,例如:update Market set Active = 1 where MarketID in (3, 151)
有没有办法做到这一点?可以使用与SQL Server 2016兼容的任何内置函数。
注意:
感谢@johnlbevan的帮助。SELECT VALUE FROM OPENJSON(@JSON, '$.Markets')
对于这个问题非常有效。
为了完整起见,这是我如何从SQL Server创建JSON整数数组("Markets": [3, 151]
)的方法。
由于2016年没有array_agg
函数,所以我这样做:
SELECT (
JSON_QUERY('[' + STUFF(( SELECT ',' + CAST(MarketID AS VARCHAR)
FROM Market
FOR XML PATH('')),1,1,'') + ']' ) AS Markets)
AS JSON
部分,所以从Markets
得到了null
。谢谢。 - FisNaNcross apply
切换为outer apply
,具体取决于您希望的行为方式。不过我认为这在您当前的用例中并不适用。 - JohnLBevan