查询中的SQL返回数据库名称,比较三个数据库中的一个表

时间:2014-09-09 17:38:33

标签: sql sql-server-2008 sql-server-2008-r2

我创建了一个查询,用于比较三个数据库中的一个表。

我的查询代码是:

SELECT item, description, stocked, product_code, cost_method, cost_type
FROM
(
    SELECT item, description, stocked, product_code, cost_method, cost_type
        FROM [Arborg_Test_App].[dbo].item
    UNION ALL
    SELECT item, description, stocked, product_code, cost_method, cost_type 
        FROM [Teulon_Test_App].[dbo].item
    UNION ALL
    SELECT item, description, stocked, product_code, cost_method, cost_type
        FROM [PA_Test_App].[dbo].item
) data

GROUP BY item, description, stocked, product_code, cost_method, cost_type
HAVING COUNT(*) = 1

它工作得很好,它比较了三个数据库中的表 item ,只返回所选列中的数据在三个数据库之间不匹配的行。

我的问题是,在返回的结果中,我无法判断哪一行来自哪个数据库。我的查询结果: enter image description here

我需要的是在查询结果中添加一列,显示每行的数据库名称。

1 个答案:

答案 0 :(得分:3)

因为您正在寻找单例,所以您只需将db名称添加到每个子查询中,然后在外部查询中使用max()

SELECT item, description, stocked, product_code, cost_method, cost_type,
       max(db) as thedb
FROM
(
    SELECT item, description, stocked, product_code, cost_method, cost_type, 'arbord' as db
        FROM [Arborg_Test_App].[dbo].item
    UNION ALL
    SELECT item, description, stocked, product_code, cost_method, cost_type, 'teulon'
        FROM [Teulon_Test_App].[dbo].item
    UNION ALL
    SELECT item, description, stocked, product_code, cost_method, cost_type, 'pa'
        FROM [PA_Test_App].[dbo].item
) data
GROUP BY item, description, stocked, product_code, cost_method, cost_type
HAVING COUNT(*) = 1;