Cannot resolve the collation conflict between "SQL_Latin1_General_CP850_BIN" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.
------------------------------------------------------------------------
SQL_Latin1_General_CP850_BIN,SQL_Latin1_General_CP1_CI_AS是什么东西啊~?

解决方案 »

  1.   

    那是因为你的表达式所引用的两个操作数表达式的排序规则不同。  
     
    参考:
     
    如果复杂表达式所引用的两个操作数表达式的排序规则不同,则该复杂表达式最终结果的排序规则标志基于下列规则:    
     
    显式优先于隐性。隐性优先于强制默认。换言之,    
    显式  >  隐性  >  强制默认  
     
    组合两个已指派给不同排序规则的显式表达式将生成错误。    
    显式  X  +  显式  Y  =  错误  
     
    组合两个具有不同排序规则的隐性表达式将产生无排序规则。    
    隐性  X  +  隐性  Y  =  无排序规则  
     
    将无排序规则的表达式与任何标志的表达式组合,除了显式排序规则外(参见下一项),都产生无排序规则标志的结果。    
    无排序规则  +  任何标志  =  无排序规则  
     
    将无排序规则的表达式与显式排序规则的表达式组合将产生具有显式标志的表达式。    
    无排序规则  +  显式  X  =  显式  
     
    下面的示例说明上述规则。  
     
    USE  tempdb  
    GO  
     
    CREATE  TABLE  TestTab  (  
         id  int,    
         GreekCol  nvarchar(10)  collate  greek_ci_as,    
         LatinCol  nvarchar(10)  collate  latin1_general_cs_as  
         )  
    INSERT  TestTab  VALUES  (1,  N'A',  N'a')  
    GO  
     
    下面查询中的谓词具有排序规则冲突,因此产生错误:  
     
    SELECT  *    
    FROM  TestTab    
    WHERE  GreekCol  =  LatinCol  
     
    下面是结果集。  
     
    Msg  446,  Level  16,  State  9,  Server  CTSSERV,  Line  1  
    Cannot  resolve  collation  conflict  for  equal  to  operation.  
     
    下面查询中的谓词在排序规则  greek_ci_as  中取值,因为右边表达式具有显式标志,优先于右边表达式的隐性标志:  
     
    SELECT  *    
    FROM  TestTab    
    WHERE  GreekCol  =  LatinCol  COLLATE  greek_ci_as  
     
    下面是结果集。  
     
    id                    GreekCol            LatinCol  
     -----------  --------------------  --------------------  
    1   a                    A  
     
    (1  row  affected)  
    --------------------------------------------------------
     
    1、转成UNICODE  
    2、SQL2K可用COLLATE子句指定相同的排序規則.-- 详细内容参考SQL联机丛书中的“排序规则的优先顺序”(在“索引”栏键入关键字:排序规则标签)
      

  2.   

    排序规则不同,在你的sql中指定排序规则