繁体   English   中英

如何将数据从一个数据库导入到另一个数据库

[英]How to import data from one database to another

我有一个在 C# 中运行的 SQL 语句,它从 MySQL 的数据库 A中的表中获取数据,并将其插入到数据库 B 中的表中。

我正在一个 SQL 语句中执行选择和插入,因为数据太多而无法保存在内存中。 我的问题是,如何指定目标数据库(数据库 B)的连接字符串。

我的 SQL 语句是这样的:

sql = INSERT INTO Database_B.Table (SELECT * FROM Database_B.Table);

就像现在一样,我只指定了数据库 A 的连接字符串:

sourceDatabaseConnectionString = "Server=localhost;Port=3306;Database=Database_A;Uid=root;Pwd=root;";

using (MySqlConnection connection = new MySqlConnection(sourceDatabaseConnectionString))
{
    connection.Open();

    using (MySqlCommand command = new MySqlCommand(sql, connection))
    {
        command.CommandTimeout = 0;
        command.ExecuteNonQuery();
    }
}

现在的事情是,这是完美的工作。 但是两个数据库都在同一台服务器上并且具有相同的凭据。 如果数据库放在其他地方,我将如何处理?

我引用了 Mahmoud Gamal 的帖子,他在另一篇帖子中提出了这个答案:

将 SELECT ... INTO ... 与完全限定的表名 database.schema.object_name 一起使用,如下所示:

 USE DatabaseName;    
 SELECT * FROM DatabaseName.schemaname.Tablename INSERT INTO
 AnotherDatabase.schemaname.AnotherTablename;

然后您可以使用 ADO.net 或其他 API 从 C# 执行此查询。

来源: 在 C# 中将 SQL 查询的结果从一个数据库插入到另一个数据库

我已经通过使用 OUTFILE 语法解决了这个问题。 这是我能想到的不使用链接服务器解决这个问题的唯一方法,这对我的情况来说是不切实际的,因为我无法访问数据库,只能接受来自用户的连接字符串。

我的解决方案首先执行SELECT语句并将数据写入文件。 接下来我的INSERT语句从文件中提取,并插入到另一个表中。

因此,这种方法避免了将数百万条记录放入内存中,并且由于它们是两个单独的语句,因此我能够将每个语句与不同的连接字符串绑定 - 因此问题解决了 :)

代码类似于:

statement1 = SELECT myFields INTO OUTFILE @file;

statement2 = LOAD DATA LOCAL INFILE @file INTO TABLE myTable;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM