1

我对这个程序完全感到困惑。请纠正我在引号中的错误。

create procedure queryingsfor 
  @Tabname nvarchar(250),
  @colname nvarchar(250),
  @opname nvarchar(290),
  @valuesname nvarchar(239) 
as
begin
  set NOCOUNT on;
  declare @sql varchar(4000)
  set @sql='select * from' +@Tabname+ 'where' +@colname+''''+@opname+''''+ ''''+@valuesname+''''
  exec(@sql)
end
exec queryingsfor 'education','eduCurrentStudy','=','DME'

我只得到:

错误:消息 102,级别 15,状态 1,第 1 行
“fromeducationwhereeduCurrentStudy”附近的语法不正确。

4

2 回答 2

3

您可能想在其中添加一些空格

set @sql='select * from ' +@Tabname+ ' where ' 
           +@colname+''''+@opname+''''+ ''''+@valuesname+'''' 

正确的陈述是这样的

set @sql='select * from ' +@Tabname+ ' where '
           +@colname + @opname+ ''''+@valuesname+'''' 

或者

更好

set @sql='select * from [' +@Tabname+ '] where 
           [' +@colname + ']' + @opname+ ''''+@valuesname+''''
于 2012-07-27T06:03:58.973 回答
1

为了保护您免受SQL 注入,您应该这样做。

alter procedure queryingsfor 
  @Tabname nvarchar(250),
  @colname nvarchar(250),
  @opname nvarchar(4),
  @valuesname nvarchar(239) 
as
begin
  set NOCOUNT on;
  declare @sql nvarchar(4000)
  set @sql = 'select * from '+quotename(@Tabname)+ ' where ' +quotename(@colname)+@opname+'@valuesname'
  exec sp_executesql @sql, N'@valuesname nvarchar(239)', @valuesname
end
于 2012-07-27T06:17:36.180 回答