DECLARE @sqlCommand varchar(1000) DECLARE @columnList varchar(75) DECLARE @city varchar(75) DECLARE @region varchar(75) SET @columnList ='first_name,last_name,city' SET @city ='''伦敦''' SET @region ='''南''' SET @sqlCommand ='SELECT'+ @columnList +'FROM dbo.employee WHERE City ='+ @city and'region ='+ @ region - 和'region ='+ @ region 打印(@sqlCommand) EXEC(@sqlCommand)
当我运行此命令时出现错误
第15行,第1行,第8行 关键字'和'附近的语法不正确。
和帮助非常感谢你
答案 0 :(得分:2)
'和'必须在单引号下
@sqlCommand = 'SELECT ' + @columnList + ' FROM dbo.employee WHERE City = ' + @city + 'and region = ' + @region
答案 1 :(得分:2)
必须为所有使用动态SQL的人阅读:http://www.sommarskog.se/dynamic_sql.html
答案 2 :(得分:1)
我建议使用参数化SQL来防止sql注入,并支持执行计划重用。所以假设@columnList已经完全验证,因此保证不包含任何狡猾的东西:
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
我假设您的情况并不完全如此,否则最好不要使用动态SQL。
答案 3 :(得分:0)
尝试用以下代码替换您的SET @sqlCommand代码:
SET @sqlCommand = 'SELECT ' + @columnList + ' FROM dbo.employee WHERE City = ' + @city + ' and region = '+@region