SQL Server 無 Boolean 型別,用 BIT (0/1/NULL) 表示。NOT visible 報錯:Operand type clash: bit is incompatible with bit (邏輯非運算元不支援 BIT)。
| 寫法 | 範例 | 原理 | 推薦度 |
|---|---|---|---|
1 - visible | UPDATE t SET visible = 1 - visible WHERE id = 1 | 1-0=1, 1-1=0,直觀無負數 | ⭐⭐⭐⭐⭐ |
visible - 1 | UPDATE t SET visible = visible - 1 WHERE id = 1 | 0-1=-1 → 隱式轉換為 1 (見下) | ⭐⭐⭐ |
~visible | UPDATE t SET visible = ~visible WHERE id = 1 | 位元取反:~0=-1, ~1=-2 → 隱式轉換 | ⭐⭐ |
-1 能存入 BIT?-- SQL Server BIT 隱式轉換規則:
-- 任何非零值 → 1
-- 零 → 0
SELECT CAST(-1 AS BIT); -- 1
SELECT CAST(255 AS BIT); -- 1
SELECT CAST(-999 AS BIT); -- 1
所以 visible - 1 產生 -1 或 0,寫入 BIT 變為 1/0,達到取反效果。
1 - NULL = NULL,取反保持 NULL。若需 NULL→1,用 ISNULL(visible,0)1 - visible 語義最清晰,程式碼審查無歧義CHECK (visible IN (0,1)) 防止髒資料-- 將 0→1, 1→0, NULL→NULL
UPDATE t SET visible = CASE visible WHEN 1 THEN 0 WHEN 0 THEN 1 END;
-- 或
UPDATE t SET visible = 1 - ISNULL(visible, 0); -- NULL 視為 0 翻轉