在sqlserver中编写动态查询

时间:2010-03-30 07:25:31

标签: sql-server

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行 关键字'和'附近的语法不正确。

和帮助非常感谢你

4 个答案:

答案 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