使用 ISNULL(column, '替換值') 對某列進行 NULL 替換時,發現開頭幾行的 NULL 可以被替換,但中間數據行的 NULL 卻無法替換。
經排查,資料庫中儲存的「NULL」並非真正的 SQL NULL,而是字串 'NULL' 或包含不可見字元(如空格、換行符)的空字串。ISNULL 僅對真正的 NULL 生效,對字串 'NULL' 無作用。
-- 檢查實際儲存值
SELECT
column_name,
DATALENGTH(column_name) AS len,
CASE WHEN column_name IS NULL THEN 'True NULL' ELSE 'Not NULL' END AS null_check,
CASE WHEN column_name = '' THEN 'Empty String' ELSE 'Non-empty' END AS empty_check
FROM your_table;
UPDATE your_table
SET column_name = NULL
WHERE column_name = 'NULL' OR LTRIM(RTRIM(column_name)) = '';
SELECT COALESCE(NULLIF(LTRIM(RTRIM(column_name)), ''), '替換值')
FROM your_table;
COALESCE 替代 ISNULL,前者符合 ANSI SQL 標準且支援多參數。