es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Una consulta simple que debería estar funcionando no lo está.

Tengo una consulta simple:

declarar @manual varchar(80) = ‘Discount’,’Misc Charges’
seleccionar *
desde #Final
donde charge_type en (@manual)

Ahora he verificado que mi variable declarada está configurada correctamente utilizando el comando PRINT de la siguiente manera: PRINT ‘Discount’,’Misc Charges’ y de hecho devuelve como espero: ‘Discount’,’Misc Charges’.

Sin embargo, cuando ejecuto esta consulta, no obtengo resultados.

Si en cambio simplemente uso:

seleccionar *
desde #Final
donde charge_type en (‘Discount’,’Misc Charges’)

Entonces no hay problema, obtengo mis resultados. Estoy seguro de que me golpearé una vez que obtenga la respuesta, pero en este momento esto simplemente no tiene sentido. Sin errores, simplemente no me da mis columnas sin filas como si no hubiera datos. ¿Qué me falta?

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con la primera consulta es que el operador IN requiere una lista de valores separados por comas, no una sola cadena con múltiples valores separados por comas.

    Puede resolver esto utilizando SQL dinámico para construir una cadena con los valores separados por comas y luego incluirlo en la consulta. Aquí tienes un ejemplo:

    declare @manual varchar(80) = 'Descuento,Cargos Varios'
    declare @sql nvarchar(max)
    
    set @sql = 'select * from #Final where charge_type in (' + 
               replace(@manual, ',', ''',''') + ')'
    
    exec sp_executesql @sql
    

    Esto generará una consulta con la cadena 'Descuento','Cargos Varios' como la lista de valores para el operador IN. Se utiliza el procedimiento almacenado sp_executesql para ejecutar la declaración SQL dinámica.

Comments are closed.