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.