轉自
http://jimshu.blog.51cto.com/3171847/1095780/
一、修改SQL Server服務器(實例)的排序規則
以下實驗使用了SQL Server 2008 R2的默認實例,將Chinese_PRC_CI_AS修改成SQL_Latin1_General_CP1_CI_AS。
1. 停止SQL Server實例服務
2. 打開“命令提示符”,轉到SQL Server的安裝目錄
| C:\Users\Administrator> cd "\Program Files\Microsoft SQL Server\100\Setup Bootstrap\SQLServer2008R2" |
3. 運行setup
| C:\Program FIles\Microsoft SQL Server\100\Setup Bootstrap\SQLServer2008R2> setup /QUIET /ACTION=REBUILDDATABASE /instancename=mssqlserver /SQLSYSADMINACCOUNTS=administrator /sqlcollation=SQL_Latin1_General_CP1_CI_AS |
4. 啟動SQL Server實例服務
5. 驗證實例的排序規則

6. 驗證系統數據庫(master、model、msdb、tempdb)的排序規則

說明:此操作僅影響系統數據庫。對於已經存在的用戶數據庫無效。
二、修改數據庫的排序規則
以下實驗將修改數據庫db01的排序規則,將SQL_Latin1_General_CP1_CI_AS修改成Chinese_PRC_CI_AS。
1. SSMS圖形界面

2. 腳本
| ALTER DATABASE [db01] COLLATE Chinese_PRC_CI_AS |
3. 局限性
(1)對於已經存在的數據,此操作並不會導致立即重新排序。
(2)如果已經有對象依賴於數據庫排序規則,則更改不成功。

三、修改表的排序規則
表的排序規則依賴於數據庫的排序規則。不能修改。

四、修改列的排序規則
建議:將這個表的數據保存到另一個臨時表,重建這個表,然后從臨時表將數據導入到新表。
可以通過SSMS修改某一列的排序規則,但是,這項操作實際上還是刪除這個表以及相關的約束、觸發器,然后重建這個表、約束、索引、觸發器。


| ALTER TABLE dbo.EmpBasic DROP CONSTRAINT DF__EmpBasic__FirstN__2319CD4B ALTER TABLE dbo.EmpBasic DROP CONSTRAINT ......
CREATE TABLE dbo.Tmp_EmpBasic ( ...... FirstName nvarchar(30) COLLATE Chinese_PRC_CI_AS NULL, ...... ) ON [PRIMARY]
ALTER TABLE dbo.Tmp_EmpBasic SET (LOCK_ESCALATION = TABLE) GRANT DELETE ON dbo.Tmp_EmpBasic TO public AS dbo GRANT INSERT ON dbo.Tmp_EmpBasic TO public AS dbo GRANT SELECT ON dbo.Tmp_EmpBasic TO public AS dbo GRANT UPDATE ON dbo.Tmp_EmpBasic TO public AS dbo
ALTER TABLE dbo.Tmp_EmpBasic ADD CONSTRAINT DF__EmpBasic__FirstN__2319CD4B DEFAULT ('') FOR FirstName ALTER TABLE dbo.Tmp_EmpBasic ADD CONSTRAINT DF__EmpBasic__Middle__240DF184 ......
SET IDENTITY_INSERT dbo.Tmp_EmpBasic ON
IF EXISTS(SELECT * FROM dbo.EmpBasic) EXEC('INSERT INTO dbo.Tmp_EmpBasic (Company, EmpID, FirstName,......) SELECT Company, EmpID, FirstName, ...... FROM dbo.EmpBasic WITH (HOLDLOCK TABLOCKX)') SET IDENTITY_INSERT dbo.Tmp_EmpBasic OFF DROP TABLE dbo.EmpBasic EXECUTE sp_rename N'dbo.Tmp_EmpBasic', N'EmpBasic', 'OBJECT' CREATE UNIQUE CLUSTERED INDEX EmpID ON dbo.EmpBasic (Company, EmpID ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = OFF) ON [PRIMARY]
CREATE NONCLUSTERED INDEX FirstName ON dbo.EmpBasic ( Company, FirstName, LastName ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = OFF) ON [PRIMARY]
create trigger _ti_EmpBasic ON dbo.EmpBasic for insert as begin ...... end |