将一个数据库表复制到另一个具有不同结构的数据库表
本文关键字:数据库 结构 另一个 复制 一个 | 更新日期: 2023-09-27 17:55:18
我知道这是在这里问的。但是它没有回答我的问题。我在一个名为"合并"的数据库中有 10 个表。我正在采用一堆与"合并"结构相同的其他数据库,除了"合并"有一个额外的列,它是表中两列的组合。我正在尝试将所有这些数据传输到合并中,但我相信我认为额外的列正在阻止传输。
SqlCommand MergeDB = connDestination.CreateCommand();
string sqlMergeDB = "";
int a= 0;
for (a=0; a < tablenames.Length; a++){
string sqlMergeDB = "INSERT INTO sql_merged.dbo." + tablenames[a] + " SELECT * FROM sourceForMerged.dbo." + tablenames[a];
using (SqlDataReader reader = MergeDB.ExecuteReader()) {
while(reader.Read())
{
MessageBox.Show("Transfered a table");
}
}
}
错误发生在上面代码的 SqlDataReader 行,我相信这意味着 sql 命令有问题。请帮忙。谢谢
如果您命名 INSERT 的两个部分中的所有列......SELECT 语句,您可以将哪个源列插入到哪个目标列中。
如果您想象TargetTable (Name, ProductType, Date)
和SourceTable (Date, Type, Name)
那么使用:
INSERT INTO TargetTable (Name, ProductType, Date)
SELECT Name, Type, Date FROM SourceTable
会将三列移动到适当的列中,即使顺序不匹配。
如果您在一个表或另一个表中有"额外"列,则可以省略它们或提供表达式来填充它们:
INSERT INTO TargetTable (Name, ProductType, Date, CombinedValues)
SELECT Name, Type, Date, (ValCol1 + ' ' + ValCol2) FROM SourceTable
有四列从四个表达式接收数据,其中一个表达式连接两列数据。 (在现实生活中,你可能会发现串联表达式比较复杂,但这是基本思想)。
不能使用:
Insert Into [Table] Select * From [Table2]
除非表架构相同。 您必须列出插入语句的列。
如果可能,您可以将该列放在目标表上,然后在插入后重新添加它。
如果表非常宽,您可以执行类似操作来构建插入代码:
SELECT
'cmd.Parameter.Add("@' + column_name + '", SqlDbType.' + data_type + ');',
column_name 'Column Name',
data_type 'Data Type'
FROM information_schema.columns
WHERE table_name = 'TableName'