C# 将不同数据库中的多个数据保存到一个数据库SQL和C
这是实际的虚拟程序 我可以问一个关于这个的问题吗,如何将不同数据库中的数据保存到一个数据库中。有可能吧 我只是想制作一个简单的程序,可以从多个具有相同表名的数据库中检索数据,例如transactionTBL,然后将其保存到一个具有相同列和值的数据库中。顺便说一句,我确实尝试过使用存储过程,但它必须是一个对象,而不是varchar或stringC# 将不同数据库中的多个数据保存到一个数据库SQL和C,c#,sql,C#,Sql,这是实际的虚拟程序 我可以问一个关于这个的问题吗,如何将不同数据库中的数据保存到一个数据库中。有可能吧 我只是想制作一个简单的程序,可以从多个具有相同表名的数据库中检索数据,例如transactionTBL,然后将其保存到一个具有相同列和值的数据库中。顺便说一句,我确实尝试过使用存储过程,但它必须是一个对象,而不是varchar或string @DATABASE varchar(50) INSERT INTO UserControlTenant.dbo.tenantData (tenant_n
@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
如果数据库位于同一台服务器上,则可以使用基于union的insert select
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。如果数据库位于同一服务器上,则可以使用基于UNION的插入选择
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如果您只想要不同的结果您可以使用下面的光标从要获取记录的位置获取所有数据库并存储在另一个数据库中
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;
您可以使用下面的游标从要获取记录的位置获取所有数据库并存储在另一个数据库中
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;
它可以通过多种方式实现。所有场景都需要考虑性能和持续时间。最好的方法是在SQL端本身使用链接服务器OpenInsert查询进行操作。另一种方法是使用动态查询,将所有数据库值合并到存储过程中。可以通过多种方式实现。所有场景都需要考虑性能和持续时间。最好的方法是在SQL端本身使用链接服务器OpenInsert查询进行操作。另一种方法是使用动态查询,将所有数据库的值合并到存储过程中。只需为每个数据库提供一个连接字符串即可。只要模式相同,您就可以在运行时切换它们。除了发布的作者之外,还有什么不同吗?这很简单,只需为每个数据库提供一个连接字符串。只要模式相同,你就可以在运行时切换它们。除了我已经发布的作者之外,还有什么区别吗。。它进行得很顺利,但我的主要问题是我想将数据drom db1、db2传递给我的MainDb。。联合不是问题,但问题是如果我创建一个新数据库..@DATABASENAME varchar50作为插入UserControlTenant.dbo.tenantData tenant\u名称、收据\u id、金额、日期、时间从[@DATABASENAME].dbo.transactiondatayou试图在变量名称中指定目标db;它将不起作用,您必须按照scaisEdge specifyI已经完成的方式指定目标db。。它进行得很顺利,但我的主要问题是我想将数据drom db1、db2传递给我的MainDb。。联合不是问题,但问题是如果我创建一个新数据库..@DATABASENAME varchar50作为插入UserControlTenant.dbo.tenantData tenant\u名称、收据\u id、金额、日期、时间从[@DATABASENAME].dbo.transactiondatayou试图在变量名称中指定目标db;这将不起作用,您必须按照scaisEdge指定的方式指定目标db