none
Concatenar Variables de una sentencia SQL

    Question

  • Buen día,

    Tengo la siguiente inquietud, requiero ejecutar esta sentencia:

     set @tempins= 'INSERT INTO ' + @temptbl + ' values '+ '(' + @tempuser + ',' + @Parametro +')'
     Execute (@tempins)
    

    pero la variable @tempuser no me toma el valor con las '' comillas para poder ejecutar la instrucción y que no se me presente el siguiente error

    INSERT INTO casa values (july,4)
    Mens. 207, Nivel 16, Estado 1, Línea 1
    El nombre de columna 'july' no es válido.
    

    Y debería ser llegar así la instrucción:

    INSERT INTO casa values ('july',4)
    
    

    He intentado así pero no funciona

     set @tempins= 'INSERT INTO ' + @temptbl + ' values '+ '(' + ''' @tempuser ''' + ',' + @Parametro +')'
    
    
    Alguien me podría orientar. Muchas gracias.



     

    Thursday, November 03, 2011 1:53 PM

Answers

All replies

  • Un dato adicional, es SQL Server 2008R2. Muchas gracias
    Richard
    Thursday, November 03, 2011 2:19 PM
  • Hola.

    Esto que propones es muy mala idea, la posibilidad de que te inyecten código es altísima. Procura introducir como fija la tabla en la que se insertarían los datos, así como validar cada uno de los parámetros. Aun así, es mucho mejor que prepares un procedimiento almacenado para cada tabla, indicando como fija la tabla y los campos a insertar, sólo tendrías que suministrar los valores.

    En cualquier caso, no deja de ser un juego en el que han de añadirse dos comillas por cada comilla de la sentencia generada. Y para ir viendo cómo va quedando la cadena, realizas una consulta de la variable hasta que puedas construir lo que pretendes ejecutar:

    select @tempins = 'insert into Tabla (campo1, campo2) values (''' +
     @tempuser + ''', ''' + @Parametro + '')'
    
    select AsiVoy = @tempins
    

    Si no lo logras, nos dices.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    Monday, November 14, 2011 8:48 PM
    Moderator
  • Lo que te puso alberto es correcto, pero podrias ver de reescribir la consulta de una mejor forma:

    EXECUTE sp_executesql 
              N''insert into Tabla (campo1, campo2) values (@ptempuser, @pParametro)',
              N'@ptempuser VARCHAR(100)', N'@pParametro VARCHAR(100)',
              @ptempuser=@tempuser, @pParametro=@Parametro;

    Para mas info http://msdn.microsoft.com/en-us/library/ms188001.aspx

    Lic. Andrés M. Aiello | DBA MS SQL - Oracle | http://aiellodba.blogspot.com | @AndresAiello
    • Marked as answer by Richard2974560 Friday, November 18, 2011 5:13 PM
    Tuesday, November 15, 2011 11:50 AM
  • ok muchas gracias por las sugerencias, las tendre presente para la implementación.
    Richard
    Tuesday, November 15, 2011 1:30 PM
  • Tengo una inquietud, como seria si el parámetro es una @fecha? 

    Quedo atento, muchas gracias.


    Richard

    Thursday, February 07, 2013 3:25 PM