Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Transact SQL - параметры в IN

552
30 августа 2007 года
Ivanhoe
373 / / 30.04.2006
Интересует следующий момент. Возможно ли в T-SQL (MS SQL Server 2000) использовать конструкции вида:
 
Код:
WHERE aaa IN @aaa

Т.е. в качестве множества для выражения IN задать параметр, потом определив его значение при вызове в виде, к примеру, массива.
385
31 августа 2007 года
SomewherSomehow
477 / / 25.07.2004
а какого типа переменная @ааа?
насколько я знаю в MS SQL 2000 нет массивов. можно было бы задать таблицу, тогда конструкция приобрела бы вид:
 
Код:
declare @aaa table (a int)
...
WHERE aaa IN (select a from @aaa)
552
31 августа 2007 года
Ivanhoe
373 / / 30.04.2006
Вообще хотелось бы получить аналог
 
Код:
WHERE aaa IN (1, 2, 100)

Т.е. множества.
385
31 августа 2007 года
SomewherSomehow
477 / / 25.07.2004
тогда только формировать динамически запрос, напримерЮ вот так:
 
Код:
declare @aaa nvarchar(100)
set @aaa = '1,2,100'

declare @sql nvarchar(1000)
set @sql = 'select * from MyTable where a in ('+@aaa+')'
exec sp_executesql @sql

других способов по-моему нет
552
31 августа 2007 года
Ivanhoe
373 / / 30.04.2006
Суть ясна. Жаль, метод из серии костылей. Но спасибо :)
1.8K
03 сентября 2007 года
pod
144 / / 05.04.2006
Цитата: Ivanhoe
Интересует следующий момент. Возможно ли в T-SQL (MS SQL Server 2000) использовать конструкции вида:
 
Код:
WHERE aaa IN @aaa

Т.е. в качестве множества для выражения IN задать параметр, потом определив его значение при вызове в виде, к примеру, массива.



лично я пользовался таким запросом:
SELECT ..... WHERE aaa IN (SELECT columnName FROM tableName)
и всё работало отлично.
может в чём пигадитса ;)

552
03 сентября 2007 года
Ivanhoe
373 / / 30.04.2006
Нет, вложенный запрос не подойдет. Множество для IN должно формироваться на клиенте, затем просто подставляться в запрос.

В любом случае, сделал с помощью замены по шаблону, подставив маркер в стиле "aaa IN (?_repalace_here_?)", заменяя его потом на требуемое множество.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог