数据库的排序规则查询

时间:2024-03-16 13:35:49

刚装的数据库,选的默认的排序规则,在执行批次需求操作的时候,弹出错误提示“数据库的排序规则查询”,然后追踪批次操作所执行的sql语句,发现语句中的表的所有字段的排序规则并没有不一样的,可以用如下语句查看表的所有字段的排序规则:

        

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

 

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

  

[sql] view plaincopy
 
  1. --查看数据库的排序规则  
  2. select * from sys.databases   

 

[sql] view plaincopy
 
  1. --查看所有字段的排序规则  
  2. select * from sys.all_columns   

 

[sql] view plaincopy
 
  1. --查看某表有多少排序规则  
  2. SELECT DISTINCT collation_name--OBJECT_NAME(object_id),collation_name ,name   
  3. FROM sys.all_columns  
  4. WHERE object_id=OBJECT_ID('JX_2011..INVMB')--WHERE collation_name IS NOT NULL  

 

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

 

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

但是用如下语句:

 

[sql] view plaincopy
 
  1. 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"数据库的排序规则查询