刚装的数据库,选的默认的排序规则,在执行批次需求操作的时候,弹出错误提示“”,然后追踪批次操作所执行的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"。