Sql server 在sqlserver中编写动态查询

Sql server 在sqlserver中编写动态查询,sql-server,Sql Server,声明@sqlCommand varchar(1000) 声明@columnList varchar(75) 声明@city varchar(75) 声明@region varchar(75) SET@columnList='first\u name,last\u name,city' 设置@城市=''伦敦'' 设置@区域=''南'' SET@sqlCommand='从dbo.employee中选择'+@columnList+',其中City='+@City和'region='+@region -

声明@sqlCommand varchar(1000) 声明@columnList varchar(75) 声明@city varchar(75) 声明@region varchar(75) SET@columnList='first\u name,last\u name,city' 设置@城市=''伦敦'' 设置@区域=''南'' SET@sqlCommand='从dbo.employee中选择'+@columnList+',其中City='+@City和'region='+@region --和'region='+@region 打印(@sqlCommand) EXEC(@sqlCommand)

当我运行这个命令时,我得到一个错误

Msg 156,第15级,状态1,第8行 关键字“and”附近的语法不正确


如果你能帮上忙,那就太好了。

“和”必须单独报价

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

“和”必须在单引号下

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

尝试将SET@sqlCommand代码替换为以下代码:

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

尝试将SET@sqlCommand代码替换为以下代码:

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

A必须为所有使用动态SQL的人阅读:

A必须为所有使用动态SQL的人阅读:

我建议使用参数化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。

我建议使用参数化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