2011-01-16 2 views
0

Я использую SQL Server 2005.Любой способ построить строку, которая будет использоваться в WHERE IN()?

Я использую некоторые строковые функции, чтобы генерировать строку назад, что всегда в этом формате:

, номер, номер, номер

Я пытаю чтобы использовать эту строку как генерируемый так:

select LastName from User 
Where ID in (
subtring(<returning the format shown above>) 
) 

я получаю ошибку: Msg 8114, уровень 16, состояние 5, строка 3 Ошибка преобразования типа данных VARCHAR в Числовой.

Это имеет смысл, что если WHERE IN() передано в строке, это не сработает - поскольку обычно оно принимает разделенные запятыми истинные целые числа.

Есть ли способ выполнить то, что я пытаюсь здесь?

Спасибо!

+0

возможно дубликат [Передача VARCHAR полного разделителей значений запятой в SQL Server В функции] (http://stackoverflow.com/questions/878833/passing-a-varchar- full-of-comma-delimited-values-to-sql-server-in-function) –

ответ

1

Динамический SQL должен делать трюк.

declare @ids varchar(100) set @ids = '1,2,3,4,5,6,7' 

declare @sql nvarchar(200) set @sql = N'select LastName from User Where ID in (' + @ids + N')' 

exec sp_executesql @sql 

См http://msdn.microsoft.com/en-us/library/aa933299(v=sql.80).aspx

+0

Предостережение к этому подходу заключается в том, что оно может быть подвержено атакам SQL-инъекций. –