Tentando encontrar uma maneira de passar um terceiro valor dentro de um campo 'bit'. Eu gostaria de poder utilizar NULL como um valor pesquisável. Como em 'True', 'False' ou 'NULL', o único problema é que não tenho certeza de como fazer isso. Meus pensamentos iniciais foram algum tipo de ramificação 'if' dentro da instrução, mas não parece permitir esse tipo de sintaxe. Aqui está minha cláusula WHERE atual. Estou tentando possibilitar que [ERROR_FREE] seja registrado como '0', '1' ou 'NULL' com base em uma variável passada do meu aplicativo C#.
WHERE [TBL_OUTBOUND_REVIEW].[ACTIVE_DIRECTORY] LIKE @UserName AND
CONVERT(date, [TBL_OUTBOUND_REVIEW].[DATE_SUBMITTED]) LIKE @DateSubmitted AND
[TBL_OUTBOUND_REVIEW].[ERROR_FREE] = @Status AND
[TBL_OUTBOUND_REVIEW].[LOCATION] LIKE @Location AND
[TBL_OUTBOUND].[UDF_0] LIKE @UDF0
ORDER BY [TBL_OUTBOUND_REVIEW].[DATE_SUBMITTED] DESC;
Mais ou menos eu gostaria de fazer isso:
WHERE [TBL_OUTBOUND_REVIEW].[ACTIVE_DIRECTORY] LIKE @UserName AND
CONVERT(date, [TBL_OUTBOUND_REVIEW].[DATE_SUBMITTED]) LIKE @DateSubmitted AND
IF @Status IS NULL
[TBL_OUTBOUND_REVIEW].[ERROR_FREE] IS NULL AND
ELSE
[TBL_OUTBOUND_REVIEW].[ERROR_FREE] = @Status AND
[TBL_OUTBOUND_REVIEW].[LOCATION] LIKE @Location AND
[TBL_OUTBOUND].[UDF_0] LIKE @UDF0
ORDER BY [TBL_OUTBOUND_REVIEW].[DATE_SUBMITTED] DESC;
... Embora eu saiba que isso não funciona. :\
Use um
OR
para verificar se o parâmetro corresponde ao valor ou se o parâmetro e o valor sãoNULL
, assim:Você também pode usar uma
CASE
instrução como sua,IF
se realmente quiser, mas acho que é mais fácil ler e entender aOR
sintaxe acima, então prefiro usar isso.