valores then not ejemplos ejemplo check buscar sql-server sql-server-2008 null where-clause coalesce

sql server - then - Servidor SQL: verificando un parámetro de entrada si no es nulo y usándolo en ¿dónde?



is null sql server ejemplos (7)

Aquí hay otro enfoque

SELECT * FROM Thingies WHERE ( @thingId IS NULL OR ThingID = @thingId )

Si su parámetro es NULL, el resto de la expresión OR no se evaluará.

¿Cuál es la mejor manera de incluir un parámetro de entrada en la cláusula WHERE pero excluirlo si es nulo?

Hay varias maneras en que creo, pero parece que no puedo recordarlas.

También podría usar el COALESCE() ?? ¿Pero creo que esto es solo para SELECCIONAR valores?

Cualquier ayuda realmente apreciada

EDITAR

Para aclarar

digamos una variable llamada @code = "1", entonces mi donde sería "Donde tipo = ''B'' Y código = @code" pero si @code es nulo, entonces solo quiero "Donde tipo = ''B''" - observe el código faltante = @code


Esta pregunta realmente me ayudó con un problema similar que hizo que algunos de nosotros nos rascáramos la cabeza por un momento. Solo lo escribo en caso de que alguien más intente el mismo enfoque y no pueda entender por qué no funciona.

Estaba intentando evaluar solo una parte de una cláusula WHERE multiparte si el parámetro @Parameter no era nulo. Intenté hacer esto como a continuación, pero siempre no se devolvieron las filas si @Parameter era nulo.

DECLARE @Parameter int = null; SELECT * FROM TABLE WHERE [AlternateID] is not null AND (@Parameter is not null AND [AlternateID] = @Parameter)

(@Parameter is not null AND [AlternateID] = @Parameter) incorrectamente que (@Parameter is not null AND [AlternateID] = @Parameter) simplemente no formaría parte de la cláusula WHERE completa si @Parameter era nulo. Sin embargo, estaba haciendo que la cláusula WHERE completa devuelva falso. El remedio fue agregar un OR 1 = 1 de la siguiente manera:

WHERE [AlternateID] is not null AND (@Parameter is not null AND [AlternateID] = @Parameter OR 1=1)

Por supuesto, el enfoque esbozado por Ali (no tiene suficiente reputación para votar) lo resuelve de manera más eficiente.

WHERE [AlternateID] is not null AND [Partner_Customer_ID] = ISNULL(@Parameter, [Partner_Customer_ID])


Me gustaría sugerir una solución que encontré en otro sitio :

SELECT * FROM Thingies WHERE ThingID = isnull(@ThingId,ThingID)

Con esta solución, si el usuario selecciona null para su parámetro, su consulta devolverá todas las filas como resultado.


Puede usar ISNULL () o verificar nulos explícitamente como otros lo han mencionado. Esto debería estar bien siempre que no tenga más de 1 o 2 parámetros de entrada opcionales. Pero si hay más parámetros, este enfoque sería muy ineficiente ya que los índices que cree en esas columnas no se usarán como cabría esperar. En tal caso, le recomendaría usar SQL dinámico. Aquí hay un excelente artículo que explica por qué http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/


Puedes usar IsNull

where some_column = IsNull(@yourvariable, ''valueifnull'')

EDITAR :

Lo que describiste en el comentario se puede hacer como:

where (@code is null or code = @code)


Qué tal si

WHERE (Column1 = @Var1 OR @Var1 IS NULL) AND (Column2 = @Var2 OR @Var2 IS NULL)


echa un vistazo a este artículo ordenado aquí . Explica por qué "where (@param es nulo o Field = @ param)" no funciona bien y qué usar en su lugar.