我有下面的代码

SELECT tA.FieldName As [Field Name],
       COALESCE(tO_A.[desc], tO_B.[desc], tO_C.Name, tA.OldVAlue) AS [Old Value],
       COALESCE(tN_A.[desc], tN_B.[desc], tN_C.Name, tA.NewValue) AS [New Value],
       U.UserName AS [User Name],
       CONVERT(varchar, tA.ChangeDate) AS [Change Date] 
  FROM D tA
       JOIN 
       [DRTS].[dbo].[User] U 
         ON tA.UserID = U.UserID
       LEFT JOIN 
       A tO_A 
         on tA.FieldName = 'AID' 
        AND tA.oldValue = CONVERT(VARCHAR, tO_A.ID)
       LEFT JOIN 
       A tN_A 
         on tA.FieldName = 'AID' 
        AND tA.newValue = CONVERT(VARCHAR, tN_A.ID)
       LEFT JOIN 
       B tO_B 
         on tA.FieldName = 'BID' 
        AND tA.oldValue = CONVERT(VARCHAR, tO_B.ID)
       LEFT JOIN 
       B tN_B 
         on tA.FieldName = 'BID' 
        AND tA.newValue = CONVERT(VARCHAR, tN_B.ID)
       LEFT JOIN 
       C tO_C 
         on tA.FieldName = 'CID' 
        AND tA.oldValue = tO_C.Name
       LEFT JOIN 
       C tN_C 
         on tA.FieldName = 'CID' 
        AND tA.newValue = tN_C.Name
 WHERE U.Fullname = @SearchTerm
ORDER BY tA.ChangeDate

当运行代码时,我在添加表c的两个连接后,将错误粘贴在标题中。我认为这可能与我使用SQL Server 2008的事实有关,并在2005年的机器上恢复了这个db的副本。


当前回答

下面是我们所做的,在我们的情况下,我们需要一个临时查询,使用日期限制按需执行,查询定义在一个表中。

我们的新查询需要匹配不同数据库之间的数据,并包括来自这两个数据库的数据。

从iSeries/AS400系统导入数据的db和我们的报告数据库之间的COLLATION似乎是不同的——这可能是因为特定的数据类型(例如名称上的希腊重音等等)。

所以我们使用了下面的join子句:

...LEFT Outer join ImportDB..C4CTP C4 on C4.C4CTP COLLATE Latin1_General_CS_AS=CUS_Type COLLATE Latin1_General_CS_AS

其他回答

错误(无法解决....之间的排序冲突)通常在比较来自多个数据库的数据时发生。

因为你现在不能改变数据库的排序规则,所以使用COLLATE DATABASE_DEFAULT。

----------
AND db1.tbl1.fiel1 COLLATE DATABASE_DEFAULT =db2.tbl2.field2 COLLATE DATABASE_DEFAULT 

确定抛出此错误的字段,并向它们添加以下内容: 核对DATABASE_DEFAULT

Code字段中有两个表连接:

...
and table1.Code = table2.Code
...

将查询更新为:

...
and table1.Code COLLATE DATABASE_DEFAULT = table2.Code COLLATE DATABASE_DEFAULT
...

根本原因是您从中获取模式的sql server数据库的排序规则与您的本地安装不同。如果您不想担心排序规则,请使用与SQL Server 2008数据库相同的排序规则在本地安装SQL Server。

你可以通过4个简单的步骤轻松做到这一点

备份你的数据库,以防万一 更改数据库排序规则:右键单击数据库,选择属性,转到选项并将排序规则更改为所需的排序规则。 生成一个脚本来删除和重新创建所有数据库对象:右键单击数据库,选择任务,选择生成脚本…(请确保在向导的高级选项中选择了删除和创建,并选择模式和数据) 运行上面生成的脚本

ALTER DATABASE test2            --put your database name here
COLLATE Latin1_General_CS_AS    --replace with the collation you need