日期:2014-05-18  浏览次数:20509 次

SQL2005排序规则
有几个表是从2000导过来,有几个表是新建的
内联查询的时候就报规则不一样
然后改了一个,其它的又报,后来改到与之相关的都要改
表慢慢的多了,相关联的字段了,有没有一个方法可以改的所有字段的排序规则都一样

------解决方案--------------------
也碰到过这样的,没解决.
------解决方案--------------------
try

修改排序規則

表中列
ALTER TABLE tb
ALTER COLUMN colname nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS

数据库
ALTER DATABASE database
COLLATE SQL_Latin1_General_CP1_CI_AS
------解决方案--------------------
没有便宜的脚本可以改, 改排序规则需要遵守ALTER COLUMNS的约定, 这个约定有点多, 不但要取得列的类型定义.
如果列上有主键/约束, 还得先删除, 修改后再建立回来, 而约束还包含外键约束, 这个还要和处理相关表

所以自动化处理这个的代价比较高.
------解决方案--------------------
你可以用下面的脚本查出所有表/列上的排序规则定义, 然后逐个修改不符合要求的


SELECT
O.name, C.name, C.collation
FROM sysobjects O, syscolumns C
WHERE C.collation IS NOT NULL
AND O.id = C.id
AND O.status > = 0
AND O.xtype = 'U '
------解决方案--------------------
当然, 如果你的数据量不大, 条件许可的话, 你可以把你的库中所有的对象生成脚本, 去掉排序规则定义

然后使用此脚本建立一个新库, 再把数据从旧库过去, 最后用新库代替旧库
------解决方案--------------------
用sp_help 表名 來看這個表的排序規則,

在創建表進加上collete 排序規則 ,或在 left join 條件後加上它