2015-09-18 3 views
0

Я образующих динамический SQL, используя следующий T-SQLПредставьте фильтры, основанные на определенных условиях в SQL Server ИНЕКЕ

Declare @sql nvarchar(max); 
Declare @var1 int = 10, @var2 int = 10, @var3 int = 10 

set @sql = 'select col1, col2, col3 
      from table 
      where col1 = ' + @var1 

IF (@var2 > 0) 
BEGIN 
    SET @sql += ' AND col2 = ' + CONVERT(NVARCHAR(10), @var2) 
END 

IF (@var3 > 0) 
BEGIN 
    SET @sql += ' AND col3 = ' + CONVERT(NVARCHAR(10), @var3) 
END 

Он отлично работает, но я хочу, чтобы преобразовать это в качестве статического SQL, используя случай, когда.

Просьба дать некоторое предложение для преобразования этого утверждения.

ответ

1

это запрос

select col1,col2,col3 
from table 
where [email protected] AND 
(@var2<=0 OR col2=CONVERT(NVARCHAR(10), @var2)) AND 
(@var3<=0 OR col3=CONVERT(NVARCHAR(10), @var3)) 
+0

Большое вам спасибо Маттиа – StackUser

+0

добро пожаловать ... –

1

ответ Маттиа является правильным, если вы хотите использовать случай, когда, то здесь является альтернативой (хотя я предпочитаю Маттиа-х)

SELECT 
    Col1, Col2, Col3 
FROM 
    Table1 
WHERE 
    Col1 = @Var1 
AND Col2 = CASE 
       WHEN @Var2 > 0 THEN CONVERT(NVARCHAR(10), @var2) 
       ELSE Col2 
      END 
AND Col3 = CASE 
       WHEN @Var3 > 0 THEN CONVERT(NVARCHAR(10), @var3) 
       ELSE Col3 
      END 
+0

Спасибо за ваше предложение. Думаю, оба обойдутся мне. (Я не могу выбрать оба ответа) – StackUser

+0

Нет проблем. Маттиа - лучший ответ ИМХО. –

Смежные вопросы