2017-10-06 1 views
1

Je souhaite remplacer une partie d'une chaîne dans une instruction select dans Dynamic SQL, mais je reçois des erreurs.SQL Server 2012 remplace la chaîne dans l'instruction Select dans Dynamic SQL

Voici mon code:

set @oldTblPrefix = 'ABC' 
set @newTblPrefix = 'XYZ' 
set @sourcetid = 17 
set @template =' 
INSERT INTO ' [email protected] + '.[Tforms] 
      (id 
      ,[tablename]) 

    select id, 
      replace([tablename],'[email protected]+','[email protected]+') 
    from '+ @DB+ '.[Tforms] where tid=' +str(@sourcetid) 
exec sp_Executesql @template 

Mais je reçois ces erreurs:

nom de colonne non valide 'ABC'. Nom de colonne non valide 'XYZ'.

Répondre

0

Vous devez ajouter des guillemets simples - deux de chaque côté - avant et après vos variables. Un pour apparaître dans la chaîne résultante, et l'autre comme caractère d'échappement

Remplacez execute avec print à la fin jusqu'à ce que vous l'obteniez, et vérifiez si la requête résultante est correcte.

set @template =' 
INSERT INTO ' [email protected] + '.[Tforms] 
      (id 
      ,[tablename]) 

    select id, 
      replace([tablename],'''[email protected]+''','''[email protected]+''') 
    from '+ @DB+ '.[Tforms] where tid=' +str(@sourcetid) 
PRINT @template 
--exec sp_Executesql @template