SQL将2个查询组合在一起,其中2个查询来自不同的数据库

时间:2017-08-02 11:21:15

标签: sql sql-server

我试图将两个查询结果组合在一起,其中两个表都存在于不同的数据库中,如下所示:

select 
    (select COUNT(DISTINCT BaseVehicleID) as BVOld
     from BaseVehicle) Old,
    (select COUNT(DISTINCT BaseVehicleID) as BVNew
     from [EnhancedStandard_VCDB_Exported_PRD_3006].BaseVehicle) New

此处[EnhancedStandard_VCDB_Exported_PRD_3006]是一个不同的数据库。

因此我需要验证数据库中的记录数。

我能够将来自同一数据库的查询中的记录组合在一起。

有人可以告诉我们如何结合来自2个数据库的2个查询的结果。

4 个答案:

答案 0 :(得分:3)

您正在寻找3部分命名吗?如果是这样,这可能会奏效:

select (select COUNT(DISTINCT BaseVehicleID)
        from BaseVehicle
       ) as Old,
       (Select COUNT(DISTINCT BaseVehicleID)
        from [EnhancedStandard_VCDB_Exported_PRD_3006].dbo.BaseVehicle
       ) New

答案 1 :(得分:1)

您可以使用UNION ALL将两个查询的结果组合在一个结果集中。

考虑到您引用托管在同一SQL Server实例上的数据库,如果不是,则需要使用链接服务器(例如LinkedServerName.DatabasName.SchemaName.TableName)引用远程服务器上的表。

如果您同时使用同一服务器上的两个数据库,则可以使用以下查询,提醒,我认为您的表格属于默认架构,即dbo

Select  COUNT(DISTINCT BaseVehicleID) as BVOldCount
from BaseVehicle
UNION ALL
Select  COUNT(DISTINCT BaseVehicleID) as BVNewCount
from [EnhancedStandard_VCDB_Exported_PRD_3006].dbo.BaseVehicle;

 Select  COUNT(DISTINCT BaseVehicleID) as BVOldCount, 'BVOldCount' as Type
 from BaseVehicle
 UNION ALL
 Select  COUNT(DISTINCT BaseVehicleID) as BVNewCount, 'BVNewCount' as Type
 from [EnhancedStandard_VCDB_Exported_PRD_3006].dbo.BaseVehicle;

答案 2 :(得分:0)

试试这个:

SELECT  COUNT(DISTINCT Base.BaseVehicleID) AS BVNew ,
        Old.BVOld
FROM    [EnhancedStandard_VCDB_Exported_PRD_3006].BaseVehicle AS Base
        CROSS APPLY ( SELECT    COUNT(DISTINCT B2.BaseVehicleID) AS BVOld
                      FROM      BaseVehicle AS B2
                    ) Old
GROUP BY Old.BVOld

答案 3 :(得分:0)

如果您的其他数据库位于其他服务器中,则需要创建链接服务器并按照以下查询:

SELECT(SELECT count(*)FROM [serverName]。[DatabaseName] .dbo.TableName)  +

(SELECT count(*)FROM [serverName]。[DatabaseName] .dbo.TableName)