gpt4 book ai didi

SQL - 将存储过程的结果保存到变量

转载 作者:行者123 更新时间:2023-12-02 00:56:59 24 4
gpt4 key购买 nike

我有一个无法更改的存储过程。它返回一个选择值(整数)。

它插入一些值并返回新的 id - 存储过程的最后一行:

SELECT @newID

我正在使用新 ID,但我不想在运行存储过程时显示该值。

所以我使用以下内容:

DECLARE @test INT 
EXEC @test = Pr_My_Procedure 'NewGroupName'
SELECT @test

这执行成功,但当为存储过程创建和返回的实际值是实际 ID 号时,我的变量 @test 始终 = 0。

为什么我的变量没有被赋值?

我有一个解决方法(这不是我真正想要的,但它有效:

1    DECLARE @NewGroupID INT    
2 EXEC Pr_My_Procedure 'NewGroupName'
3 SET @NewGroupID = (SELECT GroupID FROM DB..Groups WHERE GroupName = 'NewGroupName')

这行得通,但是在运行存储过程时,我仍然在结果中返回生成的 GroupID(第 2 行)。我不想看到那个。

是否可以从过程中不返回该选择结果?

谢谢大家的建议!

最佳答案

当你这样做的时候

exec @p = StoredProc

...您正在处理过程的返回值,而不是过程的结果集。过程的默认返回值为零,因此如果您没有在过程中执行明确的 RETURN,它将返回 0。

您可以更改程序以返回您的 ID,或添加输出参数。

-- Procedure which RETURNS the ID
create procedure StoredProc_WithReturn
as
return 10;
go

-- Procedure which uses output parameter instead.
create procedure StoredProc_WithOutput
@p int output
as
select @p = 12;
go

-- Now test both ways of returning a value
declare @p int = 0,
@po int = 0;

exec @p = StoredProc_WithReturn;
select @p;

exec StoredProc_WithOutput @po output;
select @po;

由于你不能改变过程,你可以像这样将过程的结果集插入到表、临时表或表变量中

create procedure StoredProc_WithSelect
as
select 10;
go

declare @pt table (a int);

insert @pt
exec StoredProc_WithSelect;
select a from @pt;

关于SQL - 将存储过程的结果保存到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33689290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com