【问题标题】:How to pass multiple parameter in where condition in SQL如何在SQL中的where条件中传递多个参数
【发布时间】:2021-04-30 16:17:06
【问题描述】:

我有一个查询以获取如下订单详细信息:

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

单次订购效果很好。

但是,如果我有多个订单号(比如说 3000);如何在单个查询中获取所有数据 - 通过向其中传递多个参数(即多个订单号)?

谢谢。

【问题讨论】:

  • 使用表类型参数。此外,您需要切换到EXISTSIN
  • 但是,不同的订单会给出不同的ID。请问有什么例子吗?有 3-4 个样品/示例订单?
  • 收藏 Erland 的网站,因为它包含许多有用的信息 - 并以 arrays and list 开头
  • “有什么例子吗?” documentation 有很多。

标签: sql-server sql-server-2014 sql-server-2016


【解决方案1】:

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

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

【讨论】:

  • 谢谢你的提示,让我试试。
【解决方案2】:

您可以使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    相关资源
    最近更新 更多