Установка переменной в список строк для оператора IN - PullRequest
2 голосов
/ 04 ноября 2011

Можно ли назначить список строк переменной для использования в операторе IN без использования динамического SQL?

Я разрабатываю отчет в SSRS, который позволяет пользователю выбрать одно из трех возможных значений в качестве параметра, который, в свою очередь, назначит значения, связанные с этим выбором, для оператора IN. Некоторые параметры имеют одно значение, а некоторые - несколько.

Случаи 1 и 2 работают правильно, а случай 3 - нет, потому что они передаются как скалярное значение вместо списка. Я пробовал разные способы избежать кавычек вокруг каждого элемента, но он не работает.

declare @items as varchar(50)
set @items =
  CASE @parameter
    WHEN 1 then 'first'
    WHEN 2 then 'second'
    WHEN 3 then 'third, fourth'
  END

select column1
from table1
where column1 IN (@items)

Ответы [ 2 ]

4 голосов
/ 04 ноября 2011

Нет, вы не можете.Вы можете использовать табличную переменную следующим образом:

DECLARE @table TABLE(item varchar(50))

IF @parameter = 3
BEGIN 
   INSERT INTO @table(item) VALUES ('third'), ('fourth')
END
ELSE
 BEGIN
   INSERT INTO @table VALUES(
     CASE @parameter      
        WHEN 1 then 'first'
       WHEN 2 then 'second'
     END 
    )
 END

-- And use IN(subquery)
SELECT column1     
FROM table1     
WHERE column1 IN (SELECT item FROM @table) 

Также вы можете использовать EXISTS, что намного быстрее при таких проверках условий, но вы не получите значительного улучшения производительности из-за небольшого количества предметов (1-2)

SELECT column1     
FROM table1 t
WHERE EXISTS (SELECT * FROM @table WHERE item = t.column1) 
0 голосов
/ 04 ноября 2011

вы можете использовать динамический sql (не проверено)

declare @items as varchar(50)
set @items =
  CASE @parameter
    WHEN 1 then '''first'''
    WHEN 2 then '''second'''
    WHEN 3 then '''third'', ''fourth'''
  END

declare @query = 'select column1 from table1 where column1 IN ('+@items+')'
exec @query

тройные кавычки из-за механизма объединения строк

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