[SQL SERVER][Memo]如何設定Column區分大小寫

[SQL SERVER][Memo]如何設定Column區分大小寫

看到網友發問索引如何設定為case sensitive

索性幫自己加強記憶,紀錄備忘一下。

 

需求:Unique Column That Is Case Sensitive

依照MS SQL預設的定序我們無完成該需求,測試如下。

0.確認目前資料庫定序

SELECT DATABASEPROPERTYEX('demotest', 'Collation') SQLCollation;

clip_image001

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

 

clip_image002

3. Insert Data

insert into dbo.mytest
 
select 1,'RICO',null union all
 
select 2,'IaMRiCo',null union all
 
select 3,'rico',null

 

clip_image003

出現無法插入重複的索引鍵資料列。

 

接下來準備修改資料行定序,來完成該需求。

如果目前下列任何一個項目參考資料行定序的話,就無法變更其定序:

· 計算資料行

· 索引

· 散發統計資料,不論是自動產生或由 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

 

clip_image004

 

建立Unique Index

clip_image005

 

Insert Data Again

clip_image006

不在出現資料重複的錯誤訊息。

 

clip_image007

 

 

參考

設定與變更資料行定序

DATABASEPROPERTYEX (Transact-SQL)