Как добавить массив целых чисел в хранимую процедуру в SQL Server 2000 - PullRequest
0 голосов
/ 21 апреля 2011

Можно ли отправить n ints хранимой процедуре в качестве параметров? Причина в том, что мне нужно выбрать n заказов и вызвать sproc, чтобы затем отправить обратно только те идентификаторы заказов, которые я выбрал.

Я знаю, как его вызвать, но я бы предпочел назвать ряд заказов размером n строки, если это возможно.

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

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Можно отправить n целых, но, к сожалению, не как параметры.

SELECT * FROM Order WHERE orderid in (1, 2, 100)
0 голосов
/ 21 апреля 2011

Вы можете преобразовать свой разделенный запятыми параметр в XML, используя его для заполнения табличной переменной идентификаторов, которые затем можно использовать в своих запросах.

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 

Test

exec GetOrderList '1,2,3,4'

Результат

OrderID
-------
1
2
3
4
...