ISNULL 會以第一個參數的長度當長度

–猜猜看以下各有什麼結果
create table #t(c1 nvarchar(100))
insert #t values(‘abce’)
declare @c nvarchar
set @c=null
select isnull(@c,c1) from #t
這會傳回 ‘a’
 
declare @c nvarchar,@c2 nvarchar,@c3 nvarchar(2) =’ab’
set @c=null
select isnull(isnull(@c,@c2),@c3) from #t
select COALESCE(@c,@c2,@c3)
–結果
—-
a
(1 個資料列受到影響)
—-
ab
(1 個資料列受到影響)
 
感謝Alvan Joe、宛君的提問,他們說答對的應該要有金幣以買有機蔬菜…開懷大笑

One Comment

  1. Posted 2011 年 12 月 11 日 at 07:20:47 | Permalink | 回覆

    有意思, 不過一般都是用在欄位值為 null 時的替代值使用, 查了一下說明, http://msdn.microsoft.com/en-us/library/ms184325.aspx 其中的 remark 有提醒會做轉型的行為, 在 check_expression 為 null 時, 將 replacement_value 轉型為該 check_expression 的型別. 主要目的是要將 return value 的型別長度一致化沒錯. 否則若不是 null 時, 傳回的是 check_expression 豈不糗哉.

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: