SQL где предложение из объединенной строки - PullRequest
2 голосов
/ 12 августа 2010

У меня есть строка, содержащая список идентификаторов, разделенных запятыми, которые я хочу использовать в предложении where.

Как мне этого добиться? По сути у меня есть:

set @ids = '5,8,14,5324,'

SELECT * FROM theTable WHERE Id IN (@ids)

но @ids - это varchar, а Id - int.

Любые идеи высоко ценятся.

Ответы [ 3 ]

2 голосов
/ 12 августа 2010

Другой вариант, вместо динамического SQL, состоит в том, чтобы проанализировать @ids в #TempTable (один пример функции синтаксического анализа - здесь ), а затем объединиться с ним.

select *
    from theTable t1
        inner join #TempTable t2
            on t1.Id = t2.Id

или вы можете полностью обойти #TempTable (следующий код предполагает функцию синтаксического анализа по ссылке выше)

select *
    from theTable t1
        inner join dbo.fnParseStringTSQL(@ids, ',') t2
            on t1.Id = cast(t2.string as int)
1 голос
/ 12 августа 2010

Вы должны будете использовать динамический SQL с вашим текущим подходом. Убедитесь, что у вашей @ids завершена запятая.

DECLARE @DynSQL NVARCHAR(2000)

SELECT @DynSQL=  'SELECT * FROM theTable WHERE Id IN ('  + @ids + ')'

EXEC  sp_executesql @DynSQL

Помните, что динамический SQL работает в своей области видимости. Простой выбор будет работать нормально.

0 голосов
/ 12 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...