ISNULL - ใช้ได้เฉพาะใน SQL Server อนุญาตให้ทำการทดสอบและแทนที่ค่า NULL ด้วยค่าอื่น
COALESCE - มาตรฐาน ANSI อนุญาตสำหรับการทดสอบและการแทนที่ค่า NULL ด้วยค่าที่ไม่ใช่ค่า null แรกในชุดอาร์กิวเมนต์ที่มีความยาวผันแปรได้ เป็นสิ่งสำคัญที่จะต้องทราบว่าปัจจัยการตรวจสอบข้อมูลประเภทนี้
-- Conversion failed when converting the varchar value 'a' to data type int
SELECT COALESCE(CAST(NULL AS varchar(10)), 'a', 1)
-- Returns 1
SELECT COALESCE(CAST(NULL AS varchar(10)), 1, 'a')
ในตัวอย่างข้างต้น 'a' เป็นค่าที่ไม่ใช่ค่าแรก แต่ข้อมูลตัวอักษรมีลำดับความสำคัญต่ำกว่าจำนวนเต็ม
ข้อพิจารณาอีกอย่างระหว่าง ISNULL กับ COALESCE คือผลลัพธ์ของ ISNULL ถูกพิจารณาว่าไม่เป็น NULL ในขณะที่ผลลัพธ์ของการโทร COALESCE นั้นเป็น NULLable ดูโพสต์ของ JRJ ISNULL () <> COALESCE ()ในขณะที่อาจเป็นเรื่องเล็กน้อย แต่เครื่องมือเพิ่มประสิทธิภาพการสืบค้นสามารถสร้างแผนที่แตกต่างกันโดยขึ้นอยู่กับความสามารถของคอลัมน์
คุณสามารถทดสอบความสามารถในการลบล้างของนิพจน์ isnull / coalesce / case ได้อย่างง่ายดายโดยเรียกใช้ผ่าน dmo sys.dm_exec_describe_first_result_set
-- these all evaluate to not nullable (is_nullable = 0) because I'm not clever enough
DECLARE @sql nvarchar(4000) = N'
SELECT ISNULL(NULL, 1) AS I
, COALESCE(NULL, 1) AS C
, CASE WHEN NULL = NULL THEN NULL ELSE 1 END AS C1
'
SELECT
DMO.*
FROM
sys.dm_exec_describe_first_result_set(@sql, NULL, 0) AS DMO
กรณี - นอกจากนี้ยังมีฟังก์ชันสเกลาร์มาตรฐาน ANSI ฉันจะดูการใช้ CASE ในสองข้อก่อนหน้านี้เมื่อฉันมีการทดสอบที่ไม่สามารถแสดงออกด้วยสเกลาร์ที่เรียบง่าย แต่นั่นเป็นคำตอบที่ค่อนข้างอ่อนแอฉันยอมรับ
COALESCE
ขยายออกไปCASE
แต่เห็นได้ชัดในCASE
ข้อความที่คุณเขียนเองว่าคุณสามารถยืดหยุ่นได้มากขึ้นในWHEN
เงื่อนไข สำหรับISNULL
vsCOALESCE
ที่เกี่ยวข้อง / ซ้ำกัน?