0

我有以下存储过程,它确实会产生在 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'

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

“过程或函数 SPU_IsoEmailUpdate 指定的参数太多。”

我究竟做错了什么?谢谢

4

2 回答 2

0

我找到了它发生的原因。我试图通过使用查看我的存储过程描述

sp_help myProcName

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

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

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

于 2014-03-24T19:05:02.913 回答
-1

尝试这个

exec spu_isoemailupdate 
@isoNumber = '222222222', 
@newEmailAddress = 'testing@newemail.com',
@userName = 'username', 
@oldEmailValue = ''
于 2014-03-21T22:26:32.070 回答