我有一个查询来获取订单详细信息,如下所示:
declare @orderNo nvarchar(10) = '12345'
begin
select * from orderProperty where CorderID =(select id from Corder where orderno = @orderNo)
End
单个订单效果很好。
但是,如果我有多个订单号(假设有 3000 个),如何通过向其中传递多个参数(即多个订单号)来获取单个查询中的所有数据?
创建用户定义的表类型,然后将参数声明为该表类型。 然后,您可以将订单传递到该表参数中,并像使用任何其他常规表一样使用它。
-- create user-defined table type
CREATE TYPE [dbo].[ordersUdt] AS TABLE(
[orderNo] nvarchar(10) NULL
)
GO
-- declare table variable as new type
-- insert order records into table variable
declare @records ordersUdt
insert into @records ([orderNo])
values ('12345'),('34567'),('56789')
-- use table variable as you would regular table
select *
from orderProperty op
join Corder c
on op.CorderID = C.id
join @records r
on R.orderNo = r.orderNo
您可以使用OPENJSON 和交叉应用
以 JSON 格式声明订单列表
declare @orderNoList AS varchar(max) = '[1,2,3]'
最后,使用交叉应用
SELECT *
FROM orderProperty OP
INNER JOIN Corder C ON OP.CorderId = C.id
CROSS APPLY (SELECT [value] FROM OPENJSON(@orderNoList) WHERE C.id = [value]) AS O