SQL查询架构和数据从2个数据库排成一行

时间:2019-06-28 21:15:05

标签: sql sql-server

我们在生产站点中意外合并了数据,但在测试站点/数据库中仍然分离了数据。我希望能够从两个数据库中查询客户数据,以便根据客户的唯一身份进行比较。我想在查询结果中看到的是表的架构表,列和主要的uniqueidentifier键,其中表具有包含客户键的匹配外列。

例如,如果客户有发票,则客户cst_key将位于ac_invoice的inv_cst_key中。我需要该表的主键,该主键来自该行的inv_key列。因此,如果客户有两个发票,则两个inv_key会列为单独的行。

我安装了ApexSQL Search,以在数据库uniqueidentifier列中搜索客户密钥,它提供了客户cst_key存在的表和外部列(例如:inv_cst_key),但是我仍然需要该数据库的主键(例如:inv_key)客户密钥所在的表格行。我尝试使用这些搜索结果来构建带有excel的内容(对表,运算符,列等进行构建),然后将其复制/粘贴到SSMS,但是查询会通过设置方式提取数百万个结果...

DECLARE @cstkey uniqueidentifier
SET @cstkey = 'xxxxxxxxxxxxxxxxxx'

SELECT cst_key, 
inv_key,
-- many more columns
FROM co_customer 
LEFT JOIN ac_invoice ON cst_key = inv_cst_key 
-- more LEFT JOINS
WHERE cst_key = @cstkey

此外,我知道如何从2个数据库中查询数据,但我不知道如何查询,以便可以在列数据旁边的行中看到表名和列名。

DECLARE @cstkey uniqueidentifier
SET @cstkey = 'xxxxxxxxxxxxxxxxxx'

SELECT cst1.cst_key AS cst_key_1, inv1.inv_key AS inv_key_1, 
cst2.cst_key AS cst_key_2, inv2.inv_key AS inv_key_2

FROM db1name.dbo.co_customer cst1
LEFT JOIN db1name.dbo.ac_invoice inv1 (NOLOCK) ON inv1.inv_cst_key = cst1.cst_key
INNER JOIN db2name.dbo.co_customer cst2 (NOLOCK) ON cst1.cst_key = cst2.cst_key
INNER JOIN db2name.dbo.ac_invoice inv2 (NOLOCK) ON inv2.inv_cst_key = cst2.cst_key

WHERE cst1.cst_key = @cstkey 
AND cst2.cst_key = @cstkey

我希望结果看起来像这样...

DB1 | T1 | PC1 | PC1 Data Key | FC1 | FC1 Data Key || DB2 | T2 | ...  
--------------------------------------------------------------------  

DB =数据库,T =表,PC =主列,FC =外部列
顺便说一句,FC1数据密钥也将是如上所述的cst_key。

在此先感谢您的帮助。

0 个答案:

没有答案