将存储过程的现有参数更改为输出参数是否会对现有代码产生影响?
对于上下文,我有一个存储过程,它接受然后修改一个参数,通过选择它来返回修改后的参数。 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,
更加清晰。我不确定这是否安全;存储过程在许多地方被调用,所以我担心它可能会以某种意想不到的方式破坏。 这是一个合理的问题吗?
答案 0 :(得分:1)
似乎很安全。
从 https://technet.microsoft.com/en-us/library/ms187004%28v=sql.105%29.aspx:
您可以使用OUTPUT参数执行存储过程,而不是 执行存储过程时指定OUTPUT。没有错误 返回,但你不能在调用程序中使用输出值。