如何在SQL Server 2000中向存储过程添加一组int

时间:2011-04-21 00:42:06

标签: sql-server sql-server-2000

是否可以将n个int作为参数发送到存储过程?原因是因为我需要选择n个订单并调用一个sproc,然后只返回我选择的那些订单ID。

我知道如何调用一个,但如果可能的话,我宁愿调用行大小为n的一组订单。

select * 
from order 
where orderid =1 or orderid = 2 or orderid = 100 ...

2 个答案:

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