执行时,过程或函数指定了太多参数

时间:2014-03-21 22:23:23

标签: sql sql-server stored-procedures output-parameter

我有以下存储过程确实产生Management Studio 2008下指定的错误。但是在Management Studio 2012下生成输出?有什么想法吗?

ALTER PROCEDURE SPU_IsoEmailUpdate

@isoNumber char(10),
@newEmailAddress varchar(40),
@userName varchar(50),
@oldEmailAddress varchar(40) output
AS

DECLARE @oldEmail varchar(40)
BEGIN TRANSACTION

        SELECT @oldEmail = email FROM iso WHERE isonum = @isoNumber
        SELECT @oldEmailAddress = @oldEmail 

        INSERT INTO IsoEmailHistory (isonum, oldemailaddress, newemailaddress, updatedate, username)
        VALUES(@isoNumber, @oldEmail, @newEmailAddress, GETDATE(), @userName)
        IF @@ERROR <> 0     
        BEGIN
            ROLLBACK
            RAISERROR('Error inserting new Email Address.', 16, 1)
            RETURN
        END 

        IF EXISTS (SELECT isonum FROM iso WHERE isonum = @isoNumber)
        BEGIN
            UPDATE iso SET email = @newEmailAddress 
            WHERE isonum = @isoNumber
        END 
        IF @@ERROR <> 0
        BEGIN
            ROLLBACK
            RAISERROR ('Error updating email Address.', 16, 1)
            RETURN
        END

COMMIT TRANSACTION

我是如何执行的:

declare @oldEmailValue varchar(40)
exec spu_isoemailupdate '222222222', 'testing@newemail.com', 'username', @oldEmailValue output
select @oldEmailValue 'OldEmail'

但似乎我在这里做错了,因为我收到了以下错误:

&#34;程序或功能SPU_IsoEmailUpdate指定了太多参数。&#34;

我做错了什么?谢谢

2 个答案:

答案 0 :(得分:0)

我发现为什么会这样。我尝试使用

查看我的存储过程描述

sp_help myProcName

并且看到我的存储过程实际上定义的参数少于传递给它的参数。

所以,发生的事情是,我在另一个用户名下有两个同名的存储过程,显然,当调用exec myProcName时,调用了错误的一个。所以,我不得不删除一次,一切都运行得很好。

我知道,这可能是一个简单的问题但是,它可能发生在任何人身上,所以我决定在这里发布我的解决方案。

答案 1 :(得分:-1)

试试这个

exec spu_isoemailupdate 
@isoNumber = '222222222', 
@newEmailAddress = 'testing@newemail.com',
@userName = 'username', 
@oldEmailValue = ''