是否可以将n个int作为参数发送到存储过程?原因是因为我需要选择n个订单并调用一个sproc,然后只返回我选择的那些订单ID。
我知道如何调用一个,但如果可能的话,我宁愿调用行大小为n的一组订单。
select *
from order
where orderid =1 or orderid = 2 or orderid = 100 ...
答案 0 :(得分:1)
不幸的是,可以发送n个整数而不是参数。
SELECT * FROM Order WHERE orderid in (1, 2, 100)
答案 1 :(得分:0)
您可以将逗号分隔参数转换为XML,使用它来填充ID的表变量,然后可以在查询中使用。
create procedure GetOrderList @OrderIDs varchar(8000)
as
-- Convert paramter to xml
declare @XMLStr varchar(8000)
set @XMLStr = '<R><I ID="'+replace(@OrderIDs, ',', '"></I><I ID="')+'"></I></R>'
-- Table variable that holds the ID's
declare @IDs table (ID int)
-- Load the XML document and insert id's to @IDs
declare @idoc int
exec sp_xml_preparedocument @idoc out, @XMLStr
insert into @IDs
select ID from openxml(@idoc, '/R/I',1) with (ID int)
exec sp_xml_removedocument @idoc
-- Use @IDs in your query
select O.OrderID
from [order] as O
inner join @IDs as I
on O.OrderID = I.ID
测试
exec GetOrderList '1,2,3,4'
结果
OrderID
-------
1
2
3
4