在等于操作中无法解决“Latin1_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突

时间:2011-03-03 07:43:50

标签: sql subsonic subsonic3

public List<EmployeesX> GetView()
{
   Health_Scheme_System.Health_Scheme_SystemDB db = new Health_Scheme_System.Health_Scheme_SystemDB();

   var d = from empView in db.EmployeeDirectories
           join empTable in db.Employees on empView.ID_NO equals empTable.EmployeeIDCard 
           join s in db.Schemes on empTable.SchemeID equals s.SchemeID 
           select new EmployeesX {ID_NO = empView.ID_NO, FIRST_NAME = empView.FIRST_NAME, LAST_NAME = empView.LAST_NAME, EMPLOYMENT_DATE = ((DateTime)empView.EMPLOYMENT_DATE).Date, TERMINATION_DATE = ((DateTime)empView.TERMINATION_DATE).Date, LOCATION_CODE = empView.LOCATION_CODE };
           return d.ToList<EmployeesX>();
}

1 个答案:

答案 0 :(得分:5)

排序规则是指用于在文本字段中存储数据的字符集,对于为世界上所有的多种书面语言提供支持是必要的。每列可以定义特定的排序规则,或者继承数据库的排序规则。比较具有不同排序规则的列时可能会遇到麻烦,因为一个排序规则中的字符不一定等同于另一个排序规则中的相同字符。

  1. 或者,此比较中的列具有不同的排序规则:

    empView.ID_NO等于empTable.EmployeeIDCard

  2. 或者,此比较中的列具有不同的排序规则:

    empTable.SchemeID等于s.SchemeID

  3. 因此,您需要更改排序规则,以使它们在数据库模式上相同:

    ALTER TABLE MyTable ALTER COLUMN CharCol
                varchar(10)COLLATE Latin1_General_CI_AS NOT NULL
    

    或者您可以将collate database default添加到基础sql中的每个比较中。