• 修改SQL Server 的排序规则(转)


    转自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:UsersAdministrator> cd "Program FilesMicrosoft SQL Server100Setup BootstrapSQLServer2008R2"

    3. 运行setup

    C:Program FIlesMicrosoft SQL Server100Setup BootstrapSQLServer2008R2> setup /QUIET /ACTION=REBUILDDATABASE /instancename=mssqlserver /SQLSYSADMINACCOUNTS=administrator /sqlcollation=SQL_Latin1_General_CP1_CI_AS

    4. 启动SQL Server实例服务

     

    5. 验证实例的排序规则

    133759426.png

    6. 验证系统数据库(master、model、msdb、tempdb)的排序规则

    133818927.png

    说明:此操作仅影响系统数据库。对于已经存在的用户数据库无效。

    二、修改数据库的排序规则

      以下实验将修改数据库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

    三、修改表的排序规则

      表的排序规则依赖于数据库的排序规则。不能修改。

    151016158.png

    四、修改列的排序规则

      建议:将这个表的数据保存到另一个临时表,重建这个表,然后从临时表将数据导入到新表。

      可以通过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 as
    begin
    ......
    end

  • 相关阅读:
    [hdu-2048] 神、上帝以及老天爷
    or1200中IMMU分析(续)
    Java Applet读写client串口——终极篇
    树莓派_Linux串口编程_实现自发自收
    2014百度实习生面试题(部分)具体解释
    Leetcode
    eclipse+webservice开发实例
    现有一些开源ESB总线的比較
    《HTML5 从入门到精通--7.6.3 单元格垂直跨度——rowspan》
    百度究竟是哪国的公司
  • 原文地址:https://www.cnblogs.com/taoshengyujiu/p/5017270.html
Copyright © 2020-2023  润新知