2010-12-08 26 views
9

Tengo un SP que me da muchos problemas.TSQL Caso en donde declaración si el parámetro es nulo

El sp tiene dos parámetros @madeByUserId y @reportedByUserId. quiero tener algo como:

select * from table 
    where MadeByUserId = @madeByUserId (if(@reportedByUserID != null) and ReportedByUserID = @reportedByUserID) 

Básicamente quiero hacer un caso en el que la cláusula de incluir otra condición de filtro a base de la hipótesis nula/estado no nulo de la @reportedByUserId

Es eso posible ?

Muchas gracias, Radu

Respuesta

6

Probar:

select * from table 
where MadeByUserId = @madeByUserId 
AND (@reportedByUserID IS null OR ReportedByUserID = @reportedByUserID) 
+0

gracias, guardan mi día :) –

+2

O de una manera más concisa: 'donde MadeByUserId = @madeByUserId Y ReportedByUserID = isnull (@reportedByUserID, ReportedByUserID)' –

8

Usted podría utilizar COALESCE.

SELECT * 
FROM Table 
WHERE MadeByUserId = @madeByUserId 
     AND ReportedByUserID = COALESCE(@reportedByUserID, ReportedByUserID) 

Esto se traduce en

if @reportedByUserID is `NOT NULL` then 
    compare ReportedByUserID with @reportedByUserID 
else 
    compare ReportedByUserID with ReportedByUserID 

De MSDN

COALESCE

Devuelve la primera expresión no nula entre sus argumentos.

+0

gracias solución, agradable y limpio –

0

Añadir una sentencia if

SI (@reportedByUserId NO ES NULO)

SELECT * FROM tabla t DONDE t.MadeByUserId = madeByUserId etc

0

Creo que esto le dará lo que buscas

IF (@reportedByUser IS NULL) 
    select * from table 
    where MadeByUserId = @madeByUserId 
ELSE 
    select * from table 
    where MadeByUserId = @madeByUserId and ReportedByUserID = @reportedByUserID) 
Cuestiones relacionadas