对于 SQL 2016+,您只需使用 NVarchar(max) 参数将批量数据作为 JSON 传递,然后解析并加载到服务器上。您的查询将如下所示:
Insert into TargetTable(Number,Date,Customer,Quantity,[Order])
SELECT Number,Date,Customer,Quantity,[Order]
FROM OPENJSON ( @json )
WITH (
Number varchar(200) '$.Order.Number',
Date datetime '$.Order.Date',
Customer varchar(200) '$.AccountNumber',
Quantity int '$.Item.Quantity',
[Order] nvarchar(MAX) AS JSON
);
您可以将@json 参数与 NVarchar(max)(字符串)值绑定,例如:
[
{
"Order": {
"Number":"SO43659",
"Date":"2011-05-31T00:00:00"
},
"AccountNumber":"AW29825",
"Item": {
"Price":2024.9940,
"Quantity":1
}
},
{
"Order": {
"Number":"SO43661",
"Date":"2011-06-01T00:00:00"
},
"AccountNumber":"AW73565",
"Item": {
"Price":2024.9940,
"Quantity":3
}
}
]
更新看起来像:
with q as
(
select t.Number, t.Quantity oldQuantity, j.Quantity newQuantity
from OPENJSON ( @json )
WITH (
Number varchar(200) '$.Order.Number',
Date datetime '$.Order.Date',
Customer varchar(200) '$.AccountNumber',
Quantity int '$.Item.Quantity',
[Order] nvarchar(MAX) AS JSON
) j
join TargetTable t
on j.Number = t.Number
)
update q set oldQuantity = newQuantity
见:https://docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql
如果您无法绑定参数,那么在紧要关头,您可以将 JSON 文档作为文字字符串包含在您的 TSQL 批处理中。