[英]In SQL Server, testing a uniqueidentifier for null doesn't seem to work
不知道这是否是最好的方法,但是我有一个带有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
,条件(@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)
将评估为true。
请您能解释一下这种行为吗? 第一条select
语句会带来什么? 提前致谢。
可以将UNIQUEIDENTIFIER对照NULL进行检查。
我尝试将您的代码放入测试数据库,该逻辑似乎对我有用。
如果我通过以下方式致电您的存储过程:
DECLARE @RESULT2 UNIQUEIDENTIFIER;
EXEC dbo.SP_GET_SITE_IDX @SITE_NAME = '<INSERT VALUE HERE>', -- varchar(100)
@RESULT = @RESULT2 OUTPUT;-- uniqueidentifier
SELECT @RESULT2
那么我会根据站点名称是否在表格中获得正确的结果。
是否不会在该过程中将行插入您的IF中?
您确定相关站点不在您的表格中吗?
该站点可能在您的表中,但键/值为NULL?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.