2010-03-30 2 views
1

DECLARE @sqlCommand varchar (1000) DECLARE @columnList varchar (75) DECLARE @city varchar (75) DECLARE @region varchar (75) SET @columnList = « first_name, last_name, ville ' SET @city =' '' London '' ' SET @region =' '' Sud '' ' SET @sqlCommand =' SELECT '+ @columnList +' FROM dbo.employee WHERE Ville = '+ @city et 'region =' + @ région --et 'region =' + @ région impression (@sqlCommand) EXEC (@sqlCommand)écrire une requête dynamique dans sqlserver

quand je lance cette commande je reçois une erreur

Msg 156, niveau 15, état 1, ligne 8 Syntaxe incorrecte près du mot clé 'et'.

et aide serait grand merci

Répondre

2

'et' doit venir en guillemet simple

@sqlCommand = 'SELECT ' + @columnList + ' FROM dbo.employee WHERE City = ' + @city + 'and region = ' + @region 
0

Essayez de remplacer votre code SET @sqlCommand avec ceci:

SET @sqlCommand = 'SELECT ' + @columnList + ' FROM dbo.employee WHERE City = ' + @city + ' and region = '[email protected] 
1

Je recommande d'utiliser SQL paramétré pour aider à prévenir l'injection SQL et pour prendre en charge la réutilisation du plan d'exécution. Donc, en supposant @columnList est entièrement validée et donc garantie de ne pas inclure quoi que ce soit douteux:

DECLARE @sqlCommand nvarchar(1000) 
DECLARE @columnList varchar(75) 
DECLARE @city varchar(75) 
DECLARE @region varchar(75) 
SET @columnList = 'first_name, last_name, city' 
SET @city = 'London' 
SET @region = 'South' 
SET @sqlCommand = 'SELECT ' + @columnList + ' FROM dbo.employee WHERE City = @city AND region = @region' 
print(@sqlCommand) 

EXEC sp_executesql @sqlCommand, N'@city varchar(75), @region varchar(75)', @city, @region 

Je suppose que votre situation est pas exactement comme indiqué qu'il serait préférable de ne pas utiliser SQL dynamique tout autrement.