如何在SQL中的where条件中传递多个参数

问题描述 投票:0回答:2

我有一个查询来获取订单详细信息,如下所示:

    declare @orderNo nvarchar(10) = '12345'
    begin
    select * from orderProperty where CorderID =(select id from Corder where orderno = @orderNo)
    End

单个订单效果很好。

但是,如果我有多个订单号(假设有 3000 个),如何通过向其中传递多个参数(即多个订单号)来获取单个查询中的所有数据?

sql-server sql-server-2014 sql-server-2016
2个回答
0
投票

创建用户定义的表类型,然后将参数声明为该表类型。 然后,您可以将订单传递到该表参数中,并像使用任何其他常规表一样使用它。

-- 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

0
投票

您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.