【问题标题】:collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "SQL_Latin1_General_CP1_CS_AS" in the equal to operation等于操作中“SQL_Latin1_General_CP1_CI_AS”和“SQL_Latin1_General_CP1_CS_AS”之间的排序规则冲突
【发布时间】:2017-08-15 23:34:35
【问题描述】:

这是我的代码

    SELECT  
                 CASE j.ANALYSIS  
                       WHEN  'INSTALL'  THEN 'ProtectedProperty'   
                       WHEN  'REMOVAL' THEN 'UnProtectedProperty'  
                 END   AS  label ,  
                       Count(P.PROPERTYREF) AS value   
                 FROM                                                   
                       properties AS p   WITH (NOLOCK)                                      
                 INNER JOIN           
                       jobs AS j  WITH (NOLOCK)
                 ON 
                       j.PROPERTYREF = p.PROPERTYREF          
                 INNER JOIN                                      
                       LIVE_PROPS AS lp   WITH (NOLOCK)           
                 ON  
                       j.PROPERTYREF =lp.PROPERTYREF                   
                 WHERE              
                       j.Completed BETWEEN @dtmStartTime AND @dtmEndTime                  
                 AND             
                       p.OFFICE In (Select OfficeId FROM tempTbl)               

遇到类似的错误 无法解决 equal to 操作中“Latin1_General_CI_AS”和“SQL_Latin1_General_CP1_CI_AS”之间的排序规则冲突。

【问题讨论】:

标签: sql inner-join collation


【解决方案1】:

您的两列之间的排序规则不同。冒犯等于操作后加COLLATE Latin1_General_CI_AS

例如,如果问题是 LIVE_PROPS 表:

INNER JOIN LIVE_PROPS AS lp WITH (NOLOCK)
     ON j.POPERTYREF = lp.PROPERTYREF COLLATE Latin1_General_CI_AS

【讨论】:

  • 忘记最初的问题,糟糕的数据库设计。
  • 取决于您是否可以控制该列。我从上游数据库采购,可以进行整理以与 edw 整理保持一致
猜你喜欢
  • 1970-01-01
  • 2018-10-20
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多