一次修改 DB 內所有文字欄位(char,varchar,nchar,nvarchar)的 collate

朋友的需求,我會這麼 try

create table t1(pk int identity primary key,c1 nvarchar(50),c2 varchar(10))
create table t2(pk int identity primary key,c1 char(10),c2 nchar(10))

select ‘alter table [‘ + SCHEMA_NAME(schema_id) + ‘].[‘ +
o.name +’] alter column [‘ + c.name + ‘] ‘ +
TYPE_NAME(system_type_id) + ‘(‘ + CONVERT(varchar(4),max_length) + ‘) collate Chinese_Taiwan_Stroke_CS_AS’
from sys.columns c join sys.objects o
on c.object_id=o.object_id
where system_type_id in (167,175,231,239) and o.type=’U’

但要注意線上說明如下的內容(ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-CHT/s10de_6tsql/html/f1745145-182d-4301-a334-18f799d361d1.htm)

COLLATE < collation_name >

指定已改變之資料行的新定序。若未指定,就會將資料庫的預設定序指派給資料行。定序名稱可以是 Windows 定序名稱或 SQL 定序名稱。如需清單和詳細資訊,請參閱<Windows 定序名稱 (Transact-SQL)>和<SQL Server 定序名稱 (Transact-SQL)>。

COLLATE 子句只可用來變更 char、varchar、nchar 及 nvarchar 資料類型之資料行的定序。若要變更使用者定義之別名資料類型資料行的定序,您必須執行個別的 ALTER TABLE 陳述式,將資料行變更為 SQL Server 系統資料類型,並變更它的定序,然後再將資料行改回別名資料類型。

如果下列一或多個條件存在,ALTER COLUMN 不能有定序變更:

  • 如果 CHECK 條件約束、FOREIGN KEY 條件約束或計算資料行參考變更的資料行。
  • 如果在資料行上建立任何索引、統計資料或全文檢索索引。如果資料行定序變更了,在變更的資料行上自動建立的統計資料就會卸除。
  • 如果結構描述繫結檢視表或函數參考資料行。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: