繁体   English   中英

在SQL Server中,测试为null的uniqueidentifier似乎不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM