2013-02-11 5 views
2

Может кто-нибудь знает, если я мог бы использовать «условный„и“в том, где пункт» в зависимости от существующего значения ??, У меня есть запрос, как это:условный 'и' в том, где предложение зависит от существующего значения?

@declare idProduct int = 1, 
@declare idProducType int = null 

select 
    tbl.idProduct, tbl.idProductType, tbl.ProductName, tbl.ProductPrice 
from MyTable tbl 
where tbl.idProduct = 1 
    <IF idProductType is not null> 
     and tbl.idProductType = SOMEVALUE 
    <ELSE> 
     do nothing 
    <ENDIF> 

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

ответ

0

Это должно работать для вас:

@declare idProduct int = 1, 
@declare idProducType int = null 

SELECT 
    tbl.idProduct, tbl.idProductType, tbl.ProductName, tbl.ProductPrice 
FROM MyTable tbl 
WHERE tbl.idProduct = 1 
    AND (CASE WHEN idProductType is not null THEN tbl.idProductType = SOMEVALUE 
    END) 
2

Я думаю, что это то, что вы хотите:

select 
tbl.idProduct, tbl.idProductType, tbl.ProductName, tbl.ProductPrice 
from MyTable tbl 
where tbl.idProduct = 1 and (tbl.idProductType = @idProducType or @idProducType is null) 
+0

Я удалил мой комментарий, так как нет присоединяться произошедшей здесь (я неправильно интерпретировал запрос), поэтому в этом случае ни один заказ не будет более оптимальным, чем другой. (Это будет зависеть от распределения значений null/not-null в этом столбце, ваш запрос более оптимален, если есть больше ненулевых значений.) – cdhowie

0
.... 
where tbl.idProduct = 1 
    and (CASE WHEN idProductType is not null and tbl.idProductType = SOMEVALUE Then <something> END) = <something> 
/