更改现有存储过程以使用输出参数是否安全?
Is it safe to Alter an existing stored procedure to use output parameters?
将存储过程的现有参数更改为输出参数是否会对现有代码产生任何影响?
对于上下文,我有一个存储过程,它接受然后修改一个参数,通过选择它返回修改后的参数。 C# 调用者通过 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 output,
替换 @objectid int,
更干净。我不确定这是否安全;存储过程在很多地方被调用,所以我担心它可能会以某种意想不到的方式中断。 这是合理的担忧吗?
看起来很安全。
来自
https://technet.microsoft.com/en-us/library/ms187004%28v=sql.105%29.aspx :
You can execute a stored procedure with OUTPUT parameters and not
specify OUTPUT when executing the stored procedure. No error is
returned, but you cannot use the output value in the calling program.
将存储过程的现有参数更改为输出参数是否会对现有代码产生任何影响?
对于上下文,我有一个存储过程,它接受然后修改一个参数,通过选择它返回修改后的参数。 C# 调用者通过 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 output,
替换 @objectid int,
更干净。我不确定这是否安全;存储过程在很多地方被调用,所以我担心它可能会以某种意想不到的方式中断。 这是合理的担忧吗?
看起来很安全。
来自 https://technet.microsoft.com/en-us/library/ms187004%28v=sql.105%29.aspx :
You can execute a stored procedure with OUTPUT parameters and not specify OUTPUT when executing the stored procedure. No error is returned, but you cannot use the output value in the calling program.