我有以下存储过程确实产生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;
我做错了什么?谢谢
答案 0 :(得分:0)
我发现为什么会这样。我尝试使用
查看我的存储过程描述 sp_help myProcName
并且看到我的存储过程实际上定义的参数少于传递给它的参数。
所以,发生的事情是,我在另一个用户名下有两个同名的存储过程,显然,当调用exec myProcName
时,调用了错误的一个。所以,我不得不删除一次,一切都运行得很好。
我知道,这可能是一个简单的问题但是,它可能发生在任何人身上,所以我决定在这里发布我的解决方案。
答案 1 :(得分:-1)
试试这个
exec spu_isoemailupdate
@isoNumber = '222222222',
@newEmailAddress = 'testing@newemail.com',
@userName = 'username',
@oldEmailValue = ''