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