修改SQL Server 的排序規則

1、修改SQL Server服務器(實例)的排序規則sql

  如下實驗使用了SQL Server 2008 R2的默認實例,將Chinese_PRC_CI_AS修改爲SQL_Latin1_General_CP1_CI_AS數據庫


1. 中止SQL Server實例服務服務器

2. 打開「命令提示符」,轉到SQL Server的安裝目錄ide

C:\Users\Administrator> cd "\Program Files\Microsoft SQL Server\100\Setup Bootstrap\SQLServer2008R2"


3. 運行setupsqlserver

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實例服務spa


5. 驗證明例的排序規則3d

133759426.png


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

133818927.png


說明:此操做僅影響系統數據庫。對於已經存在的用戶數據庫無效。對象


2、修改數據庫的排序規則blog

  如下實驗將修改數據庫db01的排序規則,將SQL_Latin1_General_CP1_CI_AS修改爲Chinese_PRC_CI_AS


1. SSMS圖形界面

143403663.png


2. 腳本

ALTER DATABASE [db01] COLLATE Chinese_PRC_CI_AS


3. 侷限性

(1)對於已經存在的數據,此操做並不會致使當即從新排序。

(2)若是已經有對象依賴於數據庫排序規則,則更改不成功。

200939402.png



3、修改表的排序規則

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

151016158.png



4、修改列的排序規則

  建議:將這個表的數據保存到另外一個臨時表,重建這個表,而後從臨時表將數據導入到新表。

  能夠經過SSMS修改某一列的排序規則,可是,這項操做實際上仍是刪除這個表以及相關的約束、觸發器,而後重建這個表、約束、索引、觸發器。

151916239.png


151916753.png


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 asbegin......end

相關文章
相關標籤/搜索