您的位置:首页 > 数据库

易飞报错 数据库的排序规则不一致

2013-04-08 18:15 183 查看
刚装的数据库,选的默认的排序规则,在执行批次需求操作的时候,弹出错误提示“

”,然后追踪批次操作所执行的sql语句,发现语句中的表的所有字段的排序规则并没有不一样的,可以用如下语句查看表的所有字段的排序规则:



--查看某个表各个字段的排序规则
SELECT OBJECT_NAME(object_id),collation_name ,name FROM sys.all_columns
WHERE object_id=OBJECT_ID('JX_2011.dbo.INVMB')


然后试着找出问题所在,用到如下一些语句,记录在此。



--查看数据库的排序规则
select * from sys.databases


--查看所有字段的排序规则
select * from sys.all_columns


--查看某表有多少排序规则
SELECT DISTINCT collation_name--OBJECT_NAME(object_id),collation_name ,name 
FROM sys.all_columns
WHERE object_id=OBJECT_ID('JX_2011..INVMB')--WHERE collation_name IS NOT NULL


--查询出数据库有多少排序规则
SELECT DISTINCT collation_name--OBJECT_NAME(object_id),collation_name ,name 
FROM sys.all_columns
WHERE collation_name IS NOT NULL --object_id=OBJECT_ID('sales.CountryRegionCurrency')


查出数据库存在几种不一样的规则,包括报错的两种。

但是用如下语句:

select * from sys.all_columns where  collation_name like '%Chinese_PRC_CI_AS%'


确并未找到相关的记录。

经过详细查找,发现“批次需求”所牵涉到的一些sql语句,在某些插入语句里面有用到“临时表”。而临时表是存放在系统数据库tempdb中的,所才有的排序规则也是系统数据库tempdb的排序规则,而系统数据库tempdb的排序规则是“Chinese_PRC_CI_AS”,错误就出在这里了,这个排序规则必须要换为“Chinese_PRC_BIN",而系统数据库的排序规则是有系统数据库model决定的,所以必须改系统数据库model的排序规则,然后重启sql服务就好了,后发现手动改系统数据库model的排序规则受阻,这个原因没有详查,只好重装数据库解决问题,重装时候选择的排序规则是“Chinese_PRC_BIN"

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: