“0”附近的语法不正确 - 使用 sp_executeSQL 执行带输出参数的存储过程时
Incorrect Syntax Near '0' - when using sp_executeSQL to execute stored procedure with output parameter
实际存储过程是
ALTER Procedure [dbo].[ApplyList]
@oldlist int, @username varchar(50),
@newlist int, @errormessage varchar(2000) output
AS
BEGIN
SET NOCOUNT ON;
SET @errormessage = '';
END
这是 SQL 由 Entity Framework 6.1 生成并使用数据库优先方法的代码。
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
为什么我在 Management Studio 中尝试执行上述查询时收到消息 "Incorrect syntax near '0'."。
如果我从 Management Studio 以下面的格式调用,这会起作用。
DECLARE @P6 nvarchar(2000)
set @P6 = null
exec ApplyList '20', 'mk', '18', @p6 output
select @p6
go
在 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
实际存储过程是
ALTER Procedure [dbo].[ApplyList]
@oldlist int, @username varchar(50),
@newlist int, @errormessage varchar(2000) output
AS
BEGIN
SET NOCOUNT ON;
SET @errormessage = '';
END
这是 SQL 由 Entity Framework 6.1 生成并使用数据库优先方法的代码。
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
为什么我在 Management Studio 中尝试执行上述查询时收到消息 "Incorrect syntax near '0'."。
如果我从 Management Studio 以下面的格式调用,这会起作用。
DECLARE @P6 nvarchar(2000)
set @P6 = null
exec ApplyList '20', 'mk', '18', @p6 output
select @p6
go
在 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