我在MySQL
和SQL Server
中有两个数据库,我想在SQL Server
中创建表,并将MySQL
中表格中的所有行复制到新表中SQL Server
。
我可以在SQL Server
中创建与MySQL
相同的表格,代码如下:
List<String> TableNames = new List<string>();
{
IDataReader reader=
ExecuteReader("SELECT Table_Name FROM information_schema.tables WHERE table_name LIKE 'mavara%'",MySql);
while (reader.Read()) {
TableNames.Add(reader[0].ToString());
}
reader.Close();
}
foreach (string TableName in TableNames) {
IDataReader reader =
ExecuteReader("SELECT Column_Name,IS_NULLABLE,DATA_TYPE FROM information_schema.columns where TABLE_Name='" + TableName + "'",MySql);
List<string[]> Columns = new List<string[]>();
while (reader.Read()) {
string[] column = new string[3];
column[0] = reader[0].ToString();
column[1] = reader[1].ToString();
column[2] = reader[2].ToString();
Columns.Add(column);
}
reader.Close();
// create table
string queryCreatTables= "CREATE TABLE [dbo].[" + TableName + "](\n";
foreach(string[] cols in Columns)
{
queryCreatTables +="["+ cols[0] + "] " + cols[2] + " ";
if (cols[1] == "NO")
queryCreatTables += "NOT NULL";
// else
// queryCreatTables += "NULL";
queryCreatTables += " ,\n ";
}
queryCreatTables += ")";
System.Data.SqlClient.SqlCommand smd =
new System.Data.SqlClient.SqlCommand(queryCreatTables, MsSql);
System.Data.SqlClient.SqlDataReader sreader = smd.ExecuteReader();
sreader.Close();
但是我有问题将行从一个表复制到另一个表中。
对于select查询,我使用Idatareader,但我不知道如何将行插入另一个表。
答案 0 :(得分:2)
要将一个表中的行插入另一个表,请参阅以下示例查询
INSERT INTO Store_Information (store_name, Sales, Date)
SELECT store_name, sum(Sales), Date
FROM Sales_Information
答案 1 :(得分:1)
算法如下:
1. For each table in source database
2. Get a list of columns for that table
3. Create table in destination database
4. SELECT * FROM the table in source
5. For each row in data
6. Generate INSERT statement and execute on destination database
列所需的信息为Name
,Type
,Length
等。
然后通过迭代列
生成insert语句var insertStatement = "INSERT INTO " + tableName + " VALUES( ";
foreach( var column in columns )
insertStatement += "@" + column.Name + ",";
insertStatement[insertStatement.Length-1] = ')';
var command = new SqlCommand( insertStatement, MsSql );
// iterate over the columns again, but this time set values to the parameters
foreach( var column in columns )
command.Parameters.AddWithValue( "@"+column.Name, currentRow[column.Name] );
答案 2 :(得分:0)
但是我有一个问题就是将行从一个表复制到另一个表中。
您可以对数据库使用SqlDataAdapter.UpdateBatchSize
到perform Batch Updates/Inserts with a DataAdapter将数据从一个表复制到另一个表。从第一个MYSQL表中获取所有记录后,使用类似:
//Get the rows from the first mysql table as you did in your question
DataTable mysqlfirstTableRowsTobeCopied = GetDataTableFromMySQLTable();
然后你必须创建一个推荐文本来执行INSERT
之类的事情:
cmd.CommandText = "INSERT INTO TableName Column_Name, ... VALUES(...)";
或者您可以使用存储过程:
CREATE PROCEDURE sp_BatchInsert ( @ColumnName VARCHAR(20), ... )
AS
BEGIN
INSERT INTO TableName VALUES ( @ColumnNamne, ...);
END
然后:
DataTable mysqlfirstTableRowsTobeCopied = GetDataTableFromMySQLTable();
SqlConnection conn = new SqlConnection("Your connection String");
SqlCommand cmd = new SqlCommand("sp_BatchInsert", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.UpdatedRowSource = UpdateRowSource.None;
// Set the Parameter with appropriate Source Column Name
cmd.Parameters.Add("@ColumnName", SqlDbType.Varchar, 50,
mysqlfirstTableRowsTobeCopied.Columns[0].ColumnName);
...
SqlDataAdapter adpt = new SqlDataAdapter();
adpt.InsertCommand = cmd;
// Specify the number of records to be Inserted/Updated in one go. Default is 1.
adpt.UpdateBatchSize = 20;
conn.Open();
int recordsInserted = adpt.Update(mysqlfirstTableRowsTobeCopied);
conn.Close();
此代码实际上是从codeproject中有关此主题的完整教程中引用的,您可以参考它来获取更多信息:
答案 3 :(得分:0)
INSERT INTO table FROM SELECT * FROM othertable
;
答案 4 :(得分:0)
假设您已经有一个要与其他表合并的行的数据表...
再次有两种方法可以执行此操作……假设您已经选择了数据并将其放入新表中。
oldTable.Load(newTable.CreateDataReader());
oldTable.Merge(newTable);
答案 5 :(得分:-1)
将所有记录插入新表(如果第二个表不存在)
从Old_Table_Name中选择* into New_Table_Name;
将所有记录插入第二个表(如果存在第二个表但表结构应该相同)
从(Select * from First_Table_Name)插入Second_Table_Name;
答案 6 :(得分:-1)
以防万一它可以帮助某人,我已经找到了使用SqlDataAdapter在C#中执行此操作的简便方法。它会自动检测表的结构,因此您不必枚举所有列或担心表结构发生变化。然后将数据批量插入目标表中。
只要两个表具有相同的结构,这将起作用。 (例如,从生产表复制到开发人员空表。)
>>> func(arr)
array([[1, 2, 3],
[3, 4, 3],
[5, 6, 2],
[7, 8, 1],
[9, 0, 4]])