这是实际的虚拟程序
我可以问一个问题,如何将来自不同数据库的数据保存到一个数据库(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
答案 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端本身进行操作。另一种方法是使用动态查询,将所有数据库值在存储过程中合并在一起。