我有一个无法更改的存储过程。它返回一个选择值(整数)。
它插入一些值并返回新的id - 存储过程的最后一行:
<Grid>
<Grid.ColumnDefinitions>
<!--change-->
<ColumnDefinition Width="33*" />
<!--change-->
<ColumnDefinition Width="66*" />
</Grid.ColumnDefinitions>
<Border x:Name="Border1" BorderBrush="Gainsboro" BorderThickness="5" CornerRadius="8,8,3,3" Margin="10,10,10,10.4" >
<ListBox x:Name="lbButtons" Background="{x:Null}" BorderBrush="{x:Null}" Margin="10,10,10,10" />
</Border>
<Border x:Name="Border2" BorderBrush="Gainsboro" BorderThickness="5" CornerRadius="8,8,3,3" Grid.Column="1" Margin="10,10,9.2,10" />
</Grid>
我正在使用新ID,但在运行存储过程时,我不想显示该值。
所以我使用以下内容:
SELECT @newID
这成功执行,但是当创建的实际值和存储过程的返回值是实际的id号时,我的变量@test总是= 0。
为什么我的变量没有被分配?
我有一个解决方法(这不是我想要的,但它有效:
DECLARE @test INT
EXEC @test = Pr_My_Procedure 'NewGroupName'
SELECT @test
这样可行,但是在运行存储过程时,我仍然会在结果上返回生成的GroupID(第2行)。我不想看到这个。
是否可以不从程序中返回选择结果?
感谢大家的任何建议!
答案 0 :(得分:4)
当你这样做时
exec @p = StoredProc
...您正在处理proc的返回值,而不是proc的结果集。过程的默认返回值为零,这样如果在过程中没有显式RETURN,则返回0.
您可以将程序更改为RETURN您的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;
答案 1 :(得分:0)
如果您没有看到结果,则可以使用PRINT
代替SELECT
。试试这个:
DECLARE @test INT
EXEC @test = Pr_My_Procedure 'NewGroupName'
PRINT @test