将where子句作为存储过程参数传递时出错

时间:2013-11-19 06:02:14

标签: sql sql-server

我在SQL Server中创建了以下存储过程,

create procedure sp_test
    @columns nvarchar(max),
    @tablename nvarchar(max),
    @whereClause nvarchar(max)
as
   DECLARE @sql AS NVARCHAR(MAX)
   SET @sql = 'SELECT ' + @columns + ' FROM ' + @tablename + @whereClause;

   EXEC sp_executesql @sql

我试着像这样称呼它

exec sp_test 'title,name','person','where name = ''john'''

我收到这样的错误,

  

Msg 102,Level 15,State 1,Line 1
  '='附近的语法不正确。

2 个答案:

答案 0 :(得分:1)

你有一个额外的单引号,为什么不使用双引号,如:

exec sp_test 'title,name','person'," where name = 'john'"

此处还添加了一个额外的空间:

SET @sql = 'SELECT ' + @columns + ' FROM ' + @tablename+ ' ' + @whereClause;

答案 1 :(得分:1)

提示:这是因为

SELECT title,name FROM personwhere name = 'john'

不是有效的SQL。

原因现在应该是显而易见的,并留给读者练习......