Birkac saatimi harcayıp kendi kendime "neden yapamıyorum ya, boyle sacma bişi mi olur?" diye söylenirken SQL Server Books Online ' ı daha dikkatli okudum, ve araya sıkıştırılmış bir cümleyle kendime geldim. Gerçekten isnull T-SQL de yalnizca "null mı değil mi" kontrolünü mü yapar?
Returns the same type as check_expression.
Books Online, Isnull için bunu söyluyor. Yani, isnull kontrol ettiginiz parametreleri, aynı zamanda ilk kontrol ettiginizin tipine ceviriyor.
Örneğin
declare @param1 nvarchar(50), @param2 nvarchar(50),@param3 nvarchar(25)
set @param1 =' 25 karakterden uzun bir metin'
set @param2 = @param1
print isnull(@param3,@param1)
-- 25 karakterden uzun b (Print'in output'u)
param3'ün tipi nvarchar(25) oldugu için textin kalanı kesilip atılıyor. :) ilginc dimi?
Peki, birde bulmak için bu kadar uğrastıgım querynin nasıl birsey olduguna, ve dondurmediği sonuca bakalım.
select * from sysobjects
where @param1 = isnull(@param3,@param2)
Parametre tanımlamalarında gördüğünüz üzere, @param3 null oldugu için, isnull'ın @param2'yi döndürmesini, @param2 ve @param1 de birbirine eşit olduğu için tablodaki tüm kayıtları görebilmeyi umuyordum. Fakat, malesef, elimizde kocaman bir boş küme :)
Aklımızda, bloğumuzda bir yerlerde kalsın. Unuttukça açıp bakarız.
İyi & Dikkatli çalışmalar.