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.

Cambiar el valor del parámetro de SSRS por el nombre de la columna en la consulta.

Estoy intentando crear una consulta de SQL en un informe de SSRS sin utilizar procedimientos almacenados y tomar un valor de parámetro y utilizarlo como nombre de columna. Mi pregunta es cómo puedo cambiar el valor del parámetro al nombre real de la columna. He intentado la siguiente consulta con el identificador de tabla (es decir, t.@FilterColumn1) y sin el identificador de tabla (es decir, @FilterColumn1).

DECLARE @FilterColumn1 AS nvarchar(250)
SET @FilterColumn1 = ‘Column1’
SELECT DISTINCT
t.@FilterColumn1
FROM [JetNavDwh2017].[dbo].[TableName] t WITH(NOLOCK)

Cuando no utilizo el identificador de tabla, el resultado es el nombre de columna que he definido. Cuando utilizo el identificador de tabla, recibo el mensaje de error a continuación, pero no he encontrado una forma concluyente de resolver el problema en función del error. ¡Gracias de antemano por su ayuda!

Msg 102, nivel 15, estado 1, línea 4
Sintaxis incorrecta cerca de ‘@FilterColumn1’.
Msg 319, nivel 15, estado 1, línea 5
Sintaxis incorrecta cerca de la palabra clave ‘with’. Si esta instrucción es una expresión de tabla común, una cláusula xmlnamespaces o una cláusula de contexto de seguimiento de cambios, la instrucción anterior debe terminarse con un punto y coma.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    No es posible utilizar un parámetro como nombre de columna en una consulta SQL directamente. Sin embargo, se puede utilizar SQL dinámico para lograr esta funcionalidad. SQL dinámico le permite construir una declaración SQL como una cadena y después ejecutarla.

    Aquí hay un ejemplo de cómo se puede modificar su consulta utilizando SQL dinámico para lograr el resultado deseado:

    DECLARE @FilterColumn1 AS nvarchar(250)
    SET @FilterColumn1 = ‘Column1’

    DECLARE @SQL AS nvarchar(max)
    SET @SQL = ‘SELECT DISTINCT t.’ + QUOTENAME(@FilterColumn1) + ‘ FROM [JetNavDwh2017].[dbo].[TableName] t WITH(NOLOCK)’

    EXEC sp_executesql @SQL

    En esta consulta modificada, primero concatenamos el valor del parámetro con el nombre de la columna utilizando la función QUOTENAME. Esta función asegura que el nombre de la columna esté encerrado entre corchetes para evitar ataques de inyección SQL.

    Luego construimos toda la declaración SQL como una cadena y la almacenamos en la variable @SQL. Finalmente, ejecutamos la declaración SQL utilizando el procedimiento almacenado sp_executesql.

    Tenga en cuenta que SQL dinámico conlleva ciertos riesgos, como ataques de inyección SQL y problemas de rendimiento. Asegúrese de sanitizar sus parámetros de entrada y probar su consulta con exhaustividad antes de utilizarla en un entorno de producción.

Comments are closed.