當存在多列[和]/[或] v時,coalesce()是最佳解決方案線索,你想要第一個。但是,在線查看書籍時,查詢優化會將其轉換爲案例聲明。
MSDN摘錄
coalesce表達式爲CASE表達式句法快捷方式。
也就是說,代碼COALESCE(表達式,... n)通過查詢優化器爲以下CASE表達式改寫:
CASE
WHEN (expression1 IS NOT NULL) THEN expression1
WHEN (expression2 IS NOT NULL) THEN expression2
...
ELSE expressionN
END
雖這麼說,爲什麼不是簡單的ISNULL()?代碼少=更好的解決方案?
下面是一個完整的代碼片段。
-- drop the test table
drop table #temp1
go
-- create test table
create table #temp1
(
issue varchar(100) NOT NULL,
total_amount int NULL
);
go
-- create test data
insert into #temp1 values
('No nulls here', 12),
('I am a null', NULL);
go
-- isnull works fine
select
isnull(total_amount, 0) as total_amount
from #temp1
最後但並非最不重要的,你是如何讓空值成NOT NULL列?
我不得不改變表的定義,這樣我可以建立測試用例。當我嘗試將表更改爲NOT NULL時,它會失敗,因爲它會進行空性檢查。
-- this alter fails
alter table #temp1 alter column total_amount int NOT NULL
你可以發佈整個查詢嗎?雖然它看起來沒問題,但是你的表格聲明和你選擇的都是。 –
應該是左連接問題,請發佈您的查詢 – vikas