專案中03BHL01001(上海)(全形括號)與03BHL01001(上海)(半形括號)被視為相同,導致**主鍵重複錯誤**。ASCII碼明顯不同:全形(= 0xA3A8,半形( = 0x28。
中文版SQL Server預設排序規則:Chinese_PRC_CI_AS(Chinese-PRC, Case-Insensitive, Accent-Sensitive, Kana-Insensitive, Width-Insensitive)。Width-Insensitive = 不區分全形/半形**,視為等價。
-- 查詢層級指定
SELECT 1 WHERE '03BHL01001(上海)' = '03BHL01001(上海)' COLLATE Chinese_PRC_CI_AS_WS
-- 影響行數:0(正確區分)
-- 或建表/欄位層級指定
CREATE TABLE T (C NVARCHAR(50) COLLATE Chinese_PRC_CI_AS_WS PRIMARY KEY)
SELECT * FROM ::fn_helpcollations() WHERE name LIKE 'Chinese%'
挑選尾碼含_WS者(如Chinese_PRC_CI_AS_WS、Chinese_Taiwan_Stroke_CI_AS_WS)。
建議:業務涉及全半形混雜(如代碼、編號、身分證字號)的欄位,**務必在建表時指定_WS排序規則**,避免臨時COLLATE影響索引使用與效能。