none
me manda el error al hacer select en parametro como tabla RRS feed

  • Pregunta

  • Hola buenas tardes

    Alguien me puede ayudar por favor

    me manda un error en esta línea:

    set @SQLString='SELECT rfc,cod_concepto,tipo_concepto,desc_concepto,importe from'  +@name where rfc LIKE '%AAAA%'

    En el "set" y en el "where" anexo codigo

    Gracias

    CREATE PROCEDURE prueba (@name VARCHAR(30))
    
    AS
    
    DECLARE @SQLString nvarchar(100)
    
    declare  @Sales TABLE  (rfc char(13), cod_concepto char(3),tipo_cpto char(1),desc_cpto varchar(65),total money)
    
    DECLARE @rfc char(13),    
            @cod_concepto char(3),    
    		@tipo_cpto char(1),
    		@desc_cpto varchar(65),
            @total money
    
    insert into  @Sales
            ( rfc ,
              cod_concepto ,
              tipo_cpto ,
    		  desc_cpto ,
              total          
            )
        set @SQLString='SELECT rfc,cod_concepto,tipo_concepto,desc_concepto,importe from'  +@name where rfc LIKE '%AAAA%'
    
    
    	
    select s.rfc,s.tipo_cpto,s.cod_concepto,sum(s.total) total,s.desc_cpto from @Sales s
    group by s.rfc,s.tipo_cpto,s.desc_cpto,s.cod_concepto
    EXEC sp_executesql @SQLString
    GO

    jueves, 31 de enero de 2019 20:02

Todas las respuestas

  • Hola Gilberto,

    Tu cadena de texto para crear una SELECT dinámica no está bien del todo. Prueba esto:

    set @SQLString='SELECT rfc,cod_concepto,tipo_concepto,desc_concepto,importe from '  + @name + ' where rfc LIKE ''%AAAA%''';

    Seguramente el error en esta línea desaparecerá, pero puede que aparezca alguno nuevo más abajo.

    Un saludo.

    jueves, 31 de enero de 2019 20:42
  • Fíjate que te faltan comillas, y también un espacio en blanco:

     set @SQLString='SELECT rfc,cod_concepto,tipo_concepto,desc_concepto,importe from '  +@name + ' where rfc LIKE ''%AAAA%'''

    Pero aparte de eso hay muchos más errores en el script, por ejemplo donde dice insert into (...) set ... Eso no puede ser, la insert tiene que ser insert into (...) values(...) o bien insert into (...) select ... o bien inesrt into (...) exec ... . Pero no existe ninguna combinación que sea insert...set.

    Y también hay otro error en donde dice select... from @Sales. Esto no es lícito, no se permite que el nombre de tabla sea un parámetro. Para poder hacer eso tendrías que concatenar el nombre en una cadena y luego llamar al sp_executesql de manera similar a como lo haces en el @sqlstring que hay más arriba.

    Otra cosa más que posiblemente cause errores al ejecutar: el @sqlstring lo has declarado con una longitud máxima de 100, pero la cadena que le asignas puede exceder ese tamaño a nada que @name tenga unos pocos caracteres de longitud.

    jueves, 31 de enero de 2019 20:43
  • Hola GILBERTO SANTA R  

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te hago la recomendación de ingresar a los siguientes enlaces en donde puedes encontrar una posible solución para tu problema.

    https://docs.microsoft.com/en-us/dotnet/api/system.data.sqltypes.sqlstring?view=netframework-4.7.2

    https://www.mssqltips.com/sqlservertip/1160/execute-dynamic-sql-commands-in-sql-server/

    https://github.com/mysqljs/sqlstring

    https://stackoverflow.com/questions/370818/cleanest-way-to-build-an-sql-string-in-java

    Gracias por usar los foros de MSDN.

    Pedro Alfaro
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    jueves, 31 de enero de 2019 20:43