2015-08-26 8 views
4

传递的实际参数我有这个存储过程:正式参数“@mode”未声明作为输出参数,但是在要求输出

ALTER PROCEDURE spCertificationType 
    @result nvarchar(15) output, 
    @mode int 
AS 
BEGIN 
    if @mode = 1 
    begin 
     exec spGeneratedID 2, @result output 
     print @result 
    end 
END 

但是当我试图执行它,它有这个错误

形式参数“@mode”没有声明为OUTPUT参数,而是在请求的输出中传递的实际参数。

我试图设置@mode为输出这样的:

ALTER PROCEDURE spCertificationType 
    @result nvarchar(15) output, 
    @mode int output 
AS 
BEGIN 
    if @mode = 1 
    begin 
     exec spGeneratedID 2, @result output 
     print @result 
    end 
END 

但它返回一个空值。

有没有解决这个问题?提前致谢。

+0

发布您的代码来执行过程。 –

+1

我认为输出参数必须在最后(虽然不确定)。尝试改变'@结果'和@ @模式的地方# –

+0

@BogdanBogdanov这真棒!那就是解决方案..谢谢你! –

回答

8

在存储过程的参数的顺序是第一次使用的输入参数,然后使用输出参数: - 你可以看到存储过程的更多的知识链接: -

http://www.codeproject.com/Articles/126898/Sql-Server-How-To-Write-a-Stored-Procedure-in-SQL

ALTER PROCEDURE spCertificationType 

    @mode int, 
    @result nvarchar(15) output 
AS 
BEGIN 
    if @mode = 1 
    begin 
    exec spGeneratedID 2, @result output 
    print @result 
    end 
END 
+0

如果您可以添加一些有关为何解决问题的信息,那将非常有用,谢谢! – Trisha

+0

@david山姆感谢您的链接。 –

-1

我以不同的方式解决了这个错误。

  1. 我已经删除了我的SP中的参数后面的OUTPUT语句。
  2. 然后我得到了错误。
  3. 然后我回到SQLDataSource配置数据源向导并再次执行这些步骤。我发现改变SP使得向导删除与之后具有OUTPUT的参数相关的设置。