将一个数据库表复制到另一个具有不同结构的数据库表

本文关键字:数据库 结构 另一个 复制 一个 | 更新日期: 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'