【问题标题】:SQL SERVER – Cannot resolve collation conflict for equal to operationSQL SERVER - 无法解决等于操作的排序规则冲突
【发布时间】:2014-01-21 15:54:19
【问题描述】:

你能告诉我我应该把COLLATE DATABASE_DEFAULT

要创建以下视图吗?

我进行了搜索,发现我应该把 where 子句的每一边都放好。我尝试了所有可能的方法,但仍然收到相同的错误,说“无法解决等于操作中“SQL_Latin1_General_CP1_CI_AS”和“Latin1_General_CI_AS”之间的排序规则冲突。

这里是查询:

CREATE view [dbo].[NewADUsers] AS SELECT 
tbl.objectGUID AS UserGUID 
, SUBSTRING(tbl.Email, CHARINDEX('@', tbl.Email)+1,
LEN(tbl.Email)- CHARINDEX('@',tbl.Email)) AS 'DomainName'
, gd.GroupName, dsg.DefaultSubGroup, tbl.sAMAccountName
, tbl.sAMAccountName AS UserName, tbl.Email AS Email
FROM (
SELECT  
"SAMAccountName" AS sAMAccountName, "mail" AS Email, "objectGUID" AS objectGUID
    FROM OpenQuery(
        ADSI,
        'SELECT SAMAccountName, mail, objectGUID
        FROM ''LDAP://mydomain.com/OU=blah,OU=blah,OU=blah,DC=mydomain,DC=com''   
        WHERE objectClass=''User''')) 
    AS tbl
INNER JOIN dbo.GroupsDomains gd ON gd.DomainName = SUBSTRING(tbl.Email, CHARINDEX('@', tbl.Email)+1, LEN(tbl.Email)- CHARINDEX('@',tbl.Email))
LEFT JOIN dbo.DefaultSubGroups dsg ON gd.GroupName = dsg.GroupName  
WHERE tbl.objectGUID NOT IN (SELECT UserGUID FROM dbo.Users)

【问题讨论】:

    标签: sql-server active-directory


    【解决方案1】:

    我已经阅读了几篇关于这个问题的论文。最后我无法理解这个错误是如何产生的。

    我的解决方案是:
    将 COLLATE DATABASE_DEFAULT 放在连接条件中... ...

    INNER JOIN dbo.GroupsDomains gd ON gd.DomainName = SUBSTRING(tbl.Email, CHARINDEX('@', tbl.Email)+1, 
    LEN(tbl.Email)- CHARINDEX('@',tbl.Email))
    LEFT JOIN dbo.DefaultSubGroups dsg 
    
    -- Modified this next line:
    ON gd.GroupName COLLATE DATABASE_DEFAULT = dsg.GroupName COLLATE DATABASE_DEFAULT
    
    WHERE tbl.objectGUID NOT IN (SELECT UserGUID FROM dbo.Users)
    

    【讨论】:

      猜你喜欢
      • 2010-12-03
      • 2016-01-04
      • 2018-10-20
      • 2010-12-09
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多