Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将不同数据库中的多个数据保存到一个数据库SQL和C_C#_Sql - Fatal编程技术网

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

C# 将不同数据库中的多个数据保存到一个数据库SQL和C,c#,sql,C#,Sql,这是实际的虚拟程序 我可以问一个关于这个的问题吗,如何将不同数据库中的数据保存到一个数据库中。有可能吧 我只是想制作一个简单的程序,可以从多个具有相同表名的数据库中检索数据,例如transactionTBL,然后将其保存到一个具有相同列和值的数据库中。顺便说一句,我确实尝试过使用存储过程,但它必须是一个对象,而不是varchar或string @DATABASE varchar(50) INSERT INTO UserControlTenant.dbo.tenantData (tenant_n

这是实际的虚拟程序

我可以问一个关于这个的问题吗,如何将不同数据库中的数据保存到一个数据库中。有可能吧

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

@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