2012-07-27 55 views
1

我完全和这个程序混淆了,请纠正我在引号中的错误。sql server存储过程单引号

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' [email protected]+ 'where' [email protected]+''''[email protected]+''''+ ''''[email protected]+'''' 
    exec(@sql) 
end 
exec queryingsfor 'education','eduCurrentStudy','=','DME' 

我只得到:

Error: Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'fromeducationwhereeduCurrentStudy'.

回答

3

你可能想在里面添加一些空间

set @sql='select * from ' [email protected]+ ' where ' 
      [email protected]+''''[email protected]+''''+ ''''[email protected]+'''' 

正确的说法会是这样的

set @sql='select * from ' [email protected]+ ' where ' 
      [email protected] + @opname+ ''''[email protected]+'''' 

或者

更好

set @sql='select * from [' [email protected]+ '] where 
      [' [email protected] + ']' + @opname+ ''''[email protected]+'''' 
+0

引号也不需要.. – 2012-07-27 06:07:54

+0

@ astander.Thank你这么much.It工作fine.Stack溢出才是真的好。 – 7783 2012-07-27 06:20:15

+1

@astander使用'from'+ quotename(@Tabname)+''而不是手动放置引号。它处理完全限定的表名等。 – 2012-07-27 06:38:02

1

为了使您免受SQL injection你应该做这样的吧。

操作员
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)[email protected]+'@valuesname' 
    exec sp_executesql @sql, N'@valuesname nvarchar(239)', @valuesname 
end