数据库的排序规则查询

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

        

[sql]  view plain copy
 
  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 plain copy
 
  1. --查看数据库的排序规则  
  2. select * from sys.databases   
[sql]  view plain copy
 
  1. --查看所有字段的排序规则  
  2. select * from sys.all_columns   
[sql]  view plain copy
 
  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 plain copy
 
  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 plain copy
 
  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"

猜你喜欢

转载自wgllz.iteye.com/blog/1991568