Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 WHERE ID IN (@STRING)  [new]
progproger
Member

Откуда:
Сообщений: 22
Подскажите пожалуйста как мне написать проседуру в которой:

WHERE SomeID IN (@Somestring) где @Somestring - это параметр процедуры...

При вызове этой процедуры выскакивает error

EXEC MyProcedure '29,30,4,5'

Conversion failed when converting the nvarchar value '29,30,4,5' to data type int.

Заранее спасибо
18 авг 11, 13:46    [11139488]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ID IN (@STRING)  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
progproger
Подскажите пожалуйста как мне написать проседуру в которой:

WHERE SomeID IN (@Somestring) где @Somestring - это параметр процедуры...

При вызове этой процедуры выскакивает error

EXEC MyProcedure '29,30,4,5'

Conversion failed when converting the nvarchar value '29,30,4,5' to data type int.

Заранее спасибо

А так?

EXEC MyProcedure 29,30,4,5
18 авг 11, 13:47    [11139503]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ID IN (@STRING)  [new]
progproger
Member

Откуда:
Сообщений: 22
igor2222,

а так он воспримет каждое как параметр....и это не есть верно)))
18 авг 11, 13:50    [11139524]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ID IN (@STRING)  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
Или если ко-во неизвестно

EXEC MyProcedure '29,30,4,5'

Но в процедуре

DECLARE @SQLText varchar(MAX)
SET @SQLText = 'SELECT......  WHERE SomeID IN (' + @Somestring + ')'

EXEC  @SQLText
18 авг 11, 13:51    [11139535]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ID IN (@STRING)  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
progproger,

если это ид-шки и их м.б. много, то лучше распарси строку в табличную переменную или временную таблицу и юзай джоин.
18 авг 11, 13:55    [11139555]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ID IN (@STRING)  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/articles/mssql/03060701ArraysAndListsInSQLServer.shtml
18 авг 11, 14:36    [11139845]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ID IN (@STRING)  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
progproger,

-- (с) iap. Простейший вариант, преобразование не требуется. Только про индексы при таком подходе надо забыть.
declare @tt varchar(100)
set @tt = 'a,b,c'

select * from Account
where ','+@tt+',' LIKE '%,'+CAST(AccountID AS VARCHAR)+',%';




-- Через xml
declare @Where_ID_in varchar(max), @xml_str xml

set @Where_ID_in = 'a,b,c,d'
set @xml_str = '<b>' + replace(@Where_ID_in, ',', '</b><b>')+'</b>'
--select @xml_str
select f.value('.', 'varchar(max)') from @xml_str.nodes('b') R(f)




-- Вариант с рекурсией.
declare @str varchar(8000), @delimiter varchar(64)

select @str = '1,2,3,4,', @delimiter = ','

;with str_nums (n1, n2, Number) 
as
( 
 select 1-len(@delimiter) [n1], charindex(@delimiter, @str+@delimiter) [n2], 0 as Number  
 union all
 select n2 [n1], charindex(@delimiter, @str+@delimiter, n2+len(@delimiter)) [n2], Number+1 [Number]
 from str_nums
 where n2 < len(@str)
) 
select substring(@str, n1+len(@delimiter), n2-n1-1) [Value]--, Number, n1+1 [StartPosition]
from str_nums
18 авг 11, 14:59    [11140012]     Ответить | Цитировать Сообщить модератору
 Re: WHERE ID IN (@STRING)  [new]
progproger
Member

Откуда:
Сообщений: 22
Спасибо всем за внимание....Дело решенно)))))
Помогла функция iter_intlist_to_table...

Получил следующее
....
C.CategoryID IN (SELECT number FROM dbo.iter_intlist_to_table(@Categories))
...

Вот и все)))) Спасибо ещё раз!
18 авг 11, 15:18    [11140190]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить