簡體   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