2017-01-07 5 views
1
SELECT * 
FROM #empInfo 
WHERE source IN (CASE WHEN @source = 'Mint' THEN 'Mint, Ming' ELSE @source END) 

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

CREATE TABLE #empInfo 
(
    id INT IDENTITY(1, 1), 
    ename VARCHAR(50), 
    source VARCHAR(50) 
) 

INSERT INTO #empInfo 
VALUES ('Jon', 'Mint'), ('Jack', 'Ryan'), ('Jackie', 'Ming'), 
     ('Jeny', 'Wing'), ('Jen', 'Wing') 

DECLARE @source VARCHAR(50) 
SET @source = 'Mint' 

Из сказанного выше, что, если хотите есть, если значение Mint приходит в @source, то он должен искать Mint,Ming еще, что приходит в @source. @source всегда сохраняют одно значение.

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

Извините, если это невозможно без динамического запроса.

спасибо, что заранее.

ответ

4
SELECT * FROM #empInfo 
WHERE (@source = 'Mint' and source in ('Mint','Ming')) 
    OR (@source <> 'Mint' and source = @source) 

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

Сокращенный вариант вышеупомянутого запроса будет

SELECT * FROM #empInfo 
WHERE @source = source 
    OR (@source = 'Mint' and source = 'Ming') 
+0

Цените ваш ответ, но получаю ошибку синтаксиса, там что-то не хватает? – Susang

+0

Попробуйте еще раз, пожалуйста, добавьте ошибку, если она все еще не работает. –

+0

Я пробовал, и ddnt получаю любую ошибку, просмотрите ваш код, возможно, вы уронили какую-то цитату или что-то. – Zeina