我在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
'='附近的语法不正确。
答案 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。
原因现在应该是显而易见的,并留给读者练习......