“0”附近的语法错误 - 使用sp_executeSQL执行带输出参数的存储过程时

时间:2015-09-29 16:28:32

标签: sql-server entity-framework-6 sp-executesql

实际存储过程

ALTER Procedure [dbo].[ApplyList] 
    @oldlist int, @username varchar(50),
    @newlist int, @errormessage varchar(2000) output
AS
BEGIN
    SET NOCOUNT ON;
    SET @errormessage = '';
END

这是由Entity Framework 6.1生成并使用Database First方法生成的SQL代码。

declare @p6 varchar(2000);
set @p6=NULL;
exec sp_executesql N'EXEC [dbo].[ApplyList] {0}, {1}, {2}, {3}',N'@oldlist int,@username nvarchar(50), @newlist int,@errormessage varchar(2000) output',@oldlist='20',@username=N'mk',@newlist='18',@errormessage=@p6 output
select @p6

为什么我收到消息“'0'附近的语法不正确。”我正在尝试在Management Studio中执行上述查询。

如果我从Management Studio中调用以下格式,则此功能正常。

DECLARE @P6 nvarchar(2000)
set @P6 = null
exec ApplyList '20', 'mk', '18', @p6 output
select @p6
go

1 个答案:

答案 0 :(得分:1)

在SSMS(T-SQL)中,您不能使用参数占位符,您需要明确说明它们:

exec sp_executesql 
    N'EXEC [dbo].[ApplyList] @oldlist, @username, @newlist, @errormessage output',
    N'@oldlist int,@username nvarchar(50), @newlist int,@errormessage varchar(2000) output',
    @oldlist='20',@username=N'mk',@newlist='18',@errormessage=@p6 output
select @p6