将来自不同数据库的多个数据保存到一个数据库SQL和C#

时间:2018-12-22 10:51:18

标签: c# sql

这是实际的虚拟程序

enter image description here

我可以问一个问题,如何将来自不同数据库的数据保存到一个数据库(MainDatabase)中。有可能吧?

我只是想做一个简单的程序,可以从多个具有相同表名(例如transactionTBL)的数据库中检索数据,然后将其保存到具有相同列和值的一个数据库中。顺便说一句,我确实尝试过使用存储过程-但它必须是对象,而不是varchar或字符串。

@DATABASE varchar(50)

INSERT INTO UserControlTenant.dbo.tenantData (tenant_name, receipt_id, amount, date, time)
    SELECT * 
    FROM ___.dbo.transactiondata 

示例:

数据库1

~transactiontbl~

ID
receiptID
amount
date time

数据库2

~transactiontbl~

ID
receiptID
amount
date time

- MainDB

~transactiontbl~

ID
receiptID
amount
date time

3 个答案:

答案 0 :(得分:1)

如果数据库位于同一服务器上,则可以使用基于并集的插入选择

INSERT INTO UserControlTenant.dbo.tenantData (tenant_name, receipt_id, amount, date, time)
select  'db1_tenant_name', receiptID, amount,date, time
from db1.dbo.tenantData 
UNION ALL 
select  'db2_tenant_name', receiptID, amount,date, time
from db2.dbo.tenantData 
UNION ALL
....
select  'dbn_tenant_name', receiptID, amount,date, time
from dbn.dbo.tenantData 

如果希望所有行值使用UNION ALL,如果只希望获得不同的结果,则使用UNION

答案 1 :(得分:1)

您可以使用下面的光标从要获取记录的位置获取所有数据库并存储在另一个数据库中

DECLARE @Database NVARCHAR(500) ;
DECLARE @Query NVARCHAR(1000);

DECLARE looper CURSOR FOR 
SELECT [name] FROM sys.databases 
WHERE [name] IN ('test','test1') --you could edit your where clause for the 
                                   database 
                                 --you need to fetch data from 
OPEN looper    

FETCH NEXT FROM looper     
INTO @Database   

WHILE @@FETCH_STATUS = 0    
BEGIN    


    SET @Query = '
    INSERT INTO UserControlTenant.dbo.tenantData (tenant_name, receipt_id, 
    amount, date, time)
    SELECT '+@Database +',receiptID, amount,date, time FROM 
    '+@Database+'.dbo.transactiondata  
    '

    EXEC (@Query)

FETCH NEXT FROM looper     
INTO @Database    

END     
CLOSE looper;    
DEALLOCATE looper; 

答案 2 :(得分:0)

可以通过多种方式实现。在所有方案中都需要考虑性能和持续时间。最好的方法是使用链接服务器“开放式插入”查询在SQL端本身进行操作。另一种方法是使用动态查询,将所有数据库值在存储过程中合并在一起。