我有一个在C#中运行的SQL语句,它从MySQL中的数据库A 中的表中获取数据,并将其插入到数据库B 中的表中。
我在一个SQL语句中执行select和insert,因为数据太多而无法保存在内存中。我的问题是,如何指定目标数据库(数据库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();
}
}
现在问题是这完美无缺。但是两个数据库都在同一台服务器上并具有相同的凭据。如果将数据库放在别处,我该如何处理?
答案 0 :(得分:1)
我引用Mahmoud Gamal的帖子,他在另一篇文章中提出了这个答案:
使用SELECT ... INTO ...使用完全限定的表名 database.schema.object_name,如下所示:
USE DatabaseName;
SELECT * FROM DatabaseName.schemaname.Tablename INSERT INTO
AnotherDatabase.schemaname.AnotherTablename;
然后,您可以使用ADO.net或其他API从C#执行此查询。
来源:Inserting result of a SQL query from one database to another in C#
答案 1 :(得分:0)
我已使用OUTFILE语法解决了这个问题。这是我在没有使用链接服务器的情况下解决这个问题的唯一方法,这对我的情况来说不实用,因为我无法访问数据库,只接受用户的连接字符串。
我的解决方案首先执行 SELECT 语句并将数据写入文件。接下来,我的 INSERT 语句从文件中获取,并插入到另一个表中。
这种方法因此避免了将数百万条记录存储在内存中,并且因为它们是两个独立的语句,所以我能够使用不同的连接字符串绑定每个记录 - 因此解决了问题:)
代码与此类似:
statement1 = SELECT myFields INTO OUTFILE @file;
statement2 = LOAD DATA LOCAL INFILE @file INTO TABLE myTable;