在SQL中,比较两个不同数据库中的两个文本列

时间:2015-02-27 02:23:23

标签: sql-server tsql

SQL newb here。

我试图使用UNION比较一些文本类型列(认为这是最简单的方法):

SELECT 
      ResultText 
FROM [db1].[dbo].tblTransactions 
WHERE GWClientID = 122 AND Created > DATEADD(YEAR, -3, GETDATE())
UNION 
SELECT 
      ResultText 
FROM [db2].[dbo].tblTransactions 
WHERE GWClientID = 122 AND Created > DATEADD(YEAR, -3, GETDATE())

然而我收到错误:

  

数据类型文本不能用作UNION的操作数,   INTERSECT或EXCEPT运算符,因为它不具有可比性。

为什么会这样?我使用的是UNION ALL。我没有收到错误,但这不是我想要的。

为什么不使用文本类型以及如何比较文本列?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您可以使用RIGHT JOIN加入列来比较列,并使用ROW_NUMBER()为每个查询分配公共字段。 注意:我使用了MS SQL SERVER 2012

SELECT A.ResultText, B.ResultText FROM
(
SELECT
      ROW_NUMBER() OVER (ORDER BY ResultText) AS row,
      ResultText 
FROM [db1].[dbo].tblTransactions 
WHERE GWClientID = 122 AND Created > DATEADD(YEAR, -3, GETDATE())
)AS A 
RIGHT JOIN
(
SELECT 
      ROW_NUMBER() OVER (ORDER BY ResultText) AS row,
      ResultText 
FROM [db2].[dbo].tblTransactions 
WHERE GWClientID = 122 AND Created > DATEADD(YEAR, -3, GETDATE())
)AS B 
ON A.row=B.row

答案 1 :(得分:0)

假设每个“子查询”仅返回一行。不知道你打算如何使用这些信息。

select
    case
        when A.ResultText = B.ResultText then 'Same'
        else 'Not the same'
    end as Comparison
from
    (
    SELECT cast(ResultText as varchar(max)) as ResultText
    FROM db1.dbo.tblTransactions 
    WHERE GWClientID = 122 AND Created > DATEADD(YEAR, -3, GETDATE())
    ) as A,
    (
    SELECT cast(ResultText as varchar(max)) as ResultText
    FROM db2.dbo.tblTransactions 
    WHERE GWClientID = 122 AND Created > DATEADD(YEAR, -3, GETDATE())
    ) as B

如果您只想要匹配的值(/对),也可以执行INNER JOIN ON A.ResultText = B.ResultText