none
Consulta SQL dinámica RRS feed

  • Pregunta

  • Hola a todos:

    Estoy con un problema en una consulta SQL dinámica. Una que se forma dentro de un Procedimiento Almacenado. Estoy consciente de que esta no es una buena práctica. Pero el motivo escapa de mis manos, pues mi superior me ha indicado de que se debe hacer así. Me acabo de integrar a un equipo de trabajo y el desarrollo ya está muy avanzado, por lo que yo debo ceñirme a la forma que ellos han empelado (sea buena o no desde el punto de vista que ustedes tengan).

    El Error que el SQL Server me da es el siguiente: Msg 102, Level 15, State 1, Procedure Get_FromTemporalTable, Line 8 Incorrect syntax near ') AS TM_NOMCTA FROM ' -

    Y el Procedimiento Almacenado es este:

    ALTER PROCEDURE [Get_FromTemporalTable]
    	@AnoProceso int,
    	@NombreTablaTemporal nvarchar(1000)
    AS
    DECLARE @Consulta nvarchar(3000)
    SET @Consulta = 'SELECT *, ISNULL((SELECT PC_NOMBRE FROM PLNCTA WHERE PC_ANOPRO = ' + Quotename(@AnoProceso,'''') + ' AND PC_CODIGO = TM_SUBCTA), ' ') AS TM_NOMCTA FROM ' + Quotename(@NombreTablaTemporal,'''') + ' ORDER BY TM_FECVOU'
    EXEC sp_executesql @Consulta

    Según yo, el error está en ese espacio que dejo dentro del paréntesis del ISNULL. Por lo demás, intenté concatenar, pero lo que me dificulta es como poder dejar ese espacio en blanco.

    Gracias.

    martes, 12 de marzo de 2013 14:20

Respuestas

  • No, el problema está en que dentro de la instrucción que tratas de ejecutar hay unas comillas simple (''). Para escaparlas, tienes que añadirlas otras comillas simples. Es decir, la instrucción correcta sería algo así:

    SET @Consulta = 'SELECT *, ISNULL((SELECT PC_NOMBRE FROM PLNCTA WHERE PC_ANOPRO = ' + Quotename(@AnoProceso,'''') + ' AND PC_CODIGO = TM_SUBCTA), '' '') AS TM_NOMCTA FROM ' + Quotename(@NombreTablaTemporal,'''') + ' ORDER BY TM_FECVOU'

    • Propuesto como respuesta José Barba martes, 12 de marzo de 2013 14:45
    • Marcado como respuesta Budokan1987 martes, 12 de marzo de 2013 16:08
    martes, 12 de marzo de 2013 14:29

Todas las respuestas

  • No, el problema está en que dentro de la instrucción que tratas de ejecutar hay unas comillas simple (''). Para escaparlas, tienes que añadirlas otras comillas simples. Es decir, la instrucción correcta sería algo así:

    SET @Consulta = 'SELECT *, ISNULL((SELECT PC_NOMBRE FROM PLNCTA WHERE PC_ANOPRO = ' + Quotename(@AnoProceso,'''') + ' AND PC_CODIGO = TM_SUBCTA), '' '') AS TM_NOMCTA FROM ' + Quotename(@NombreTablaTemporal,'''') + ' ORDER BY TM_FECVOU'

    • Propuesto como respuesta José Barba martes, 12 de marzo de 2013 14:45
    • Marcado como respuesta Budokan1987 martes, 12 de marzo de 2013 16:08
    martes, 12 de marzo de 2013 14:29
  • Estoy de acuerdo con "Carlos Sacristan" el problema son las comillas simples.

    Personalmente cuando construya procedimientos de esta forma lo que suelo hacer antes de tirar el  sp_executesql  es hacer un SELECT @Consulta  para verificar que la construcción sea la correcta.


    Harol Perez

    martes, 12 de marzo de 2013 15:06
  • Toda la razón Carlos.

    Gracias por la aclaración.

    Saludos!

    martes, 12 de marzo de 2013 16:07
  • Gracias por la acotación.

    Saludos!

    martes, 12 de marzo de 2013 16:08