Sql server 组合来自不同数据库的两个查询

Sql server 组合来自不同数据库的两个查询,sql-server,Sql Server,我是SQL新手,有人给了我两个查询,每个查询都给我数据。一人 EXEC ('SELECT ID, Date, Type FROM DB2T.BBT') AT DB2 另一个是 use g_12 select ca.value('(/CA/@ID)[1]','VARCHAR(MAX)') as ID, ca.value('(/CA/@Date)[1]', 'VARCHAR(MAX)') as Date, ca.value('(/C

我是SQL新手,有人给了我两个查询,每个查询都给我数据。一人

EXEC ('SELECT  ID,
  Date, Type               
  FROM DB2T.BBT') AT DB2
另一个是

use g_12
select 
    ca.value('(/CA/@ID)[1]','VARCHAR(MAX)') as ID,
    ca.value('(/CA/@Date)[1]', 'VARCHAR(MAX)') as Date,
    ca.value('(/CA/@Type)[1]', 'VARCHAR(MAX)') as Type,
from log

所以我很确定它们来自两个不同的数据库,但我对每个数据库使用一组登录凭据,所以我希望我能以某种方式将它们组合起来,但我似乎找不到正确的语法。提前感谢

您可以使用
UNION ALL
并指定查询数据库名称

SELECT  
    ID,
    Date, 
    Type               
FROM DB2T.dbo.BBT
UNION ALL
select 
    ca.value('(/CA/@ID)[1]','VARCHAR(MAX)') as ID,
    ca.value('(/CA/@Date)[1]', 'VARCHAR(MAX)') as Date,
    ca.value('(/CA/@Type)[1]', 'VARCHAR(MAX)') as Type,
from g_12.dbo.log

您可能希望将两个查询与UNION/UNION ALL一起使用。它们似乎位于不同的服务器上。您如何确定它们位于不同的数据库上?无论如何,您始终可以使用EXEC AT指定数据库:“select…from dbName.dbo.log”表示第一个查询不在同一台服务器上。第二个查询只是切换到同一服务器上的另一个数据库。EXEC AT表示这是一个链接服务器,它可能指向本地服务器(这似乎不太实用lol)。我收到一个错误,说“无效对象名”DB2.BBT您可以尝试使用
DB2T.dbo.BBT
而不是
DB2.BBT
这很接近,但第一个查询是在链接服务器上运行的,因此它必须是DB2.DB2T.dbo.BBT。这是一个由四部分组成的命名,即[LinkServer].[Database].[Schema].[Object]@SeanLange现在为链接服务器“DB2”获取错误“OLE DB provider”…(出于隐私目的删除)不包含表“DB2T”、“dbo”、“BBT”。该表不存在,或者当前用户对该表没有权限我可以使用EXEC语句访问它,所以也许你上面的评论与此有关。我们在这里主要是根据经验猜测的。我们很难告诉您数据库的位置。这对你来说会容易得多。:)