如何修改服务器排序规则,整个服务器的,不是单个数据库的,谢谢!

解决方案 »

  1.   

    可以修改,我曾经修改过,2005 collation, 曾经有一份IBM给的专业修改的脚本,但我不建议你那样做,IBM给的建议是,保存所有的数据库,修改大量的注册表键值,而且很有可能(是很有可能)将SQL SERVER MASTER数据库损坏,导致SQL SERVER 无法启动。最后我们得出的解决方案是,保存数据库,以及其他的用户名以及权限(这个有专门的软件可以去做),后卸载数据库,在安装中选择正确的COLLATION,这样才能改掉整个服务器的COLLATION否则别无他法。
      

  2.   

    更改服务器排序规则 
    更改 SQL Server 2005 实例的默认排序规则的操作可能会比较复杂,包括以下步骤: 确保具有重新创建用户数据库及这些数据库中的所有对象所需的全部信息或脚本。 
    使用工具(例如大容量复制)导出所有数据。 
    删除所有用户数据库。 
    重新生成在 setup 命令的 SQLCOLLATION 属性中指定新的排序规则的 master 数据库。例如: 
    复制代码 
    start /wait setup.exe /qb INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=test SQLCOLLATION=SQL_Latin1_General_CP1_CI_AI 
    有关重新生成 master 数据库的详细信息,请参阅如何重新生成 SQL Server 2005 的 Master 数据库。 
    创建所有数据库及这些数据库中的所有对象。 
    导入所有数据。 
    注意:  
    可以为创建的每个新数据库指定默认排序规则,而不更改 SQL Server 2005 实例的默认排序规则。
      

  3.   


     替小F 多说一句,先备份好数据库,否则MASTER损坏,你也只有哭的份了
      

  4.   

    --整个服务器的没试过,修改 数据库中每个表的如下
    CREATE PROCEDURE [LM_ChangeCollation] @new_collation varchar(100)=NULL  AS  DECLARE  @table   varchar(50), @column          varchar(60), @type   varchar(20), @legth   varchar(4), @nullable  varchar(8), @sql   varchar(8000), @msg   varchar(8000), @servercollation varchar(120)  select @servercollation = convert(sysname, serverproperty('collation'))  DECLARE C1 CURSOR FOR  select  'Table'  = b.name,  'Column' = a.name,  'Type'  = type_name(a.xusertype),  'Length' = a.length,  'Nullable' = case when a.isnullable = 0 then 'NOT NULL' else ' ' end from syscolumns a, sysobjects b where a.number = 0  and a.id =b.id and b.xtype='U' and b.name not like 'dt%' and type_name(a.xusertype) in ('char', 'varchar', 'text', 'nchar', 'nvarchar', 'ntext') order by b.name,a.colid  OPEN C1 FETCH NEXT FROM C1 INTO  @table,@column,@type,@legth,@nullable   WHILE @@FETCH_STATUS=0 BEGIN  IF @new_collation is null set @new_collation=@servercollation  set @sql='ALTER TABLE ' + @table + ' ALTER COLUMN ' + @column + ' ' set @sql=@sql+ @type+'('+@legth+')'+' COLLATE '+@new_collation+' '+@nullable  EXEC (@sql)  FETCH NEXT FROM C1 INTO  @table,@column,@type,@legth,@nullable  END CLOSE C1 DEALLOCATE C1 GO