不确定这是否是最好的方法,但我有一个带有 OUTPUT 参数的存储过程,如下所示;
create procedure [dbo].[sp_get_site_idx]
@site_name varchar(100),
@result uniqueidentifier output
as
begin
select @result = [primary_idx_col] from [site] where upper([site].[site_name]) = upper(@site_name);
if (@result is null)
begin
< insert a new row>
< run the above select statement again>
end;
end;
当提供@site_name
我知道不存在的 a 时,条件(@result is null)
永远不会为真,实际上@result
似乎是未定义的(类似于编程语言中存在异常时)。
表[site]
创建为:
create table [site] (
[primary_idx_col] UNIQUEIDENTIFIER DEFAULT NEWID() constraint pk_site_pk primary key,
...
);
select
奇怪的是,如果我将语句稍微修改为:
select @result = [primary_idx_col] from [site] where upper([site].[site_name]) = upper(@site_name) group by [primary_idx_col];
然后(@result is null)
将评估为真。
请问你能解释一下这种行为吗?第一条select
语句有什么用?提前致谢。