0

我有一个正常运行的 SQL Server 存储过程。但是,对于一个记录,当我浏览存储过程时,它“跳过”了一行而不运行它。

if not exists ( select * ... ) begin
    exec @Result = InsertRecord_A @AccountNo, @ID, @EventID;
    if @Result <> 0 return @Result;

    -- Do something else
    insert into ...
    select ...
end

在这种情况下,该行将exec @Result...被跳过。通常它会启动该程序InsertRecord_A,但我无法让它在此记录上运行。

有任何想法吗?

更新:有以下错误信息:

Msg 201, Level 16, State 4, Procedure InsertRecord_A, Line 0
Procedure or function 'InsertRecord_A' expects parameter '@EventID', which was not supplied.

错误消息的奇怪之处在于,当浏览它时,@EventID 显示它的值为 460,这是正确的。

4

2 回答 2

3

尝试将参数显式设置为正确的值,而不是按序号位置传递它们并希望它们的顺序正确:

exec @Result = InsertRecord_A @AccountNo = @AccountNo, @ID = @ID, @EventID = @EventID;

这当然是假设您的InsertRecord_A过程确实需要 3 个与您的变量同名的过程。

如果您对此不确定,可以运行exec sp_help InsertRecord_A或查看sys.parameters表格以检查它们的名称。

于 2012-11-28T15:35:47.690 回答
1

我认为@SchmitzIT 要求的是过程 InsertRecord_A 的实际 SQL 代码(CREATE PROCEDURE 等),而不是错误代码。只是一个猜测:你得到的错误是我过去在不小心更改过程定义中的参数数量时遇到的错误。如果您的 proc 已像这样更改:

CREATE PROCEDURE InsertREcord_A @ExtraParameter int, @AccountNo int,@ID int,@EventID int

那么它将在位置 4 中寻找 @EventID 参数。事实上,您在位置 3 中传递了一个名为 @EventID 的有效参数,这将无济于事!在这种情况下,位置 3 的传入参数和位置 4 的预期参数都称为@EventID,这一事实令人困惑。

(这就是为什么我总是在过程定义中为参数加上 p 前缀)

于 2012-11-28T15:38:49.550 回答