更改现有存储过程以使用输出参数是否安全?

时间:2015-07-16 18:41:06

标签: c# tsql sql-server-2008-r2 output-parameter

将存储过程的现有参数更改为输出参数是否会对现有代码产生影响?

对于上下文,我有一个存储过程,它接受然后修改一个参数,通过选择它来返回修改后的参数。 C#Callers通过SqlCommand.ExecuteReader接收返回的参数。

存储过程如下所示:

CREATE procedure UpsertData
    @objectid int, --This line would change
    ...
as

if not exists (select objectid from mytable where objectid = @objectid)
begin
    insert into mytable (...) values (...)
    set @objectid = (select scope_identity() as int)
end
else
begin
    update mytable
    set ...
    where objectid=@objectid
end
select @objectid

我现在打算在其他存储过程中调用此存储过程。使用INSERT-EXEC将允许我避免修改UpsertData,这在几个地方使用。

但是,用@objectid int,替换@objectid int output,更加清晰。我不确定这是否安全;存储过程在许多地方被调用,所以我担心它可能会以某种意想不到的方式破坏。 这是一个合理的问题吗?

1 个答案:

答案 0 :(得分:1)

似乎很安全。

https://technet.microsoft.com/en-us/library/ms187004%28v=sql.105%29.aspx

  

您可以使用OUTPUT参数执行存储过程,而不是   执行存储过程时指定OUTPUT。没有错误   返回,但你不能在调用程序中使用输出值。