[SQL SERVER][Memo]如何設定Column區分大小寫
看到網友發問索引如何設定為case sensitive,
索性幫自己加強記憶,紀錄備忘一下。
需求:Unique Column That Is Case Sensitive
依照MS SQL預設的定序我們無完成該需求,測試如下。
0.確認目前資料庫定序
SELECT DATABASEPROPERTYEX('demotest', 'Collation') SQLCollation;
MSSQL預設的定序=Chinese_Taiwan_Stroke_CI_AS,CI:Case Insensitive,AS:Accent sensitive。
1. Create Table
create table dbo.MYTEST
(
SERIAL int not null,
COL1 varchar(10) not null,
COL2 varchar(10) null
CONSTRAINT [PK_MYTEST] primary key CLUSTERED (SERIAL)
)
2. Create Unique Index
CREATE UNIQUE NONCLUSTERED INDEX nidx_COL1
ON dbo.MYTEST (COL1 asc);
Table Layout
3. Insert Data
insert into dbo.mytest
select 1,'RICO',null union all
select 2,'IaMRiCo',null union all
select 3,'rico',null
出現無法插入重複的索引鍵資料列。
接下來準備修改資料行定序,來完成該需求。
如果目前下列任何一個項目參考資料行定序的話,就無法變更其定序:
· 計算資料行
· 索引
· 散發統計資料,不論是自動產生或由 CREATE STATISTICS 陳述式產生
· CHECK 條件約束
· FOREIGN KEY 條件約束
刪除原來Index
drop index nidx_COL1 on dbo.mytest
修改資料行定序
ALTER TABLE dbo.mytest
ALTER COLUMN COL1 VARCHAR(20)
COLLATE Chinese_Taiwan_Stroke_CS_AS
建立Unique Index
Insert Data Again
不在出現資料重複的錯誤訊息。
參考