修改sqlserver实例、数据库、表、字段的排序规则⼀、修改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图形界⾯
insert语句字段顺序
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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。