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 に答える