在SQL中将表的所有值插入到另一个表中

我试图插入一个表的所有值到另一个。 但是插入语句接受值,但我希望它接受来自initial_Table的select *。 这可能吗?

插入语句实际上有一个这样做的语法。 如果您指定列名称而不是select“*”,则更容易:

INSERT INTO new_table (Foo, Bar, Fizz, Buzz) SELECT Foo, Bar, Fizz, Buzz FROM initial_table -- optionally WHERE ... 

我最好澄清一点,因为这个职位因为某种原因得到了一些反对票。

INSERT INTO … SELECT FROM语法是用于当你插入的表(上面我的例子中的“new_table”)已经存在的时候。 正如其他人所说的那样,SELECT … INTO语法用于当你想创build新表作为命令的一部分。

您没有指定是否需要将新表作为命令的一部分进行创build,因此,如果您的目标表已经存在,那么INSERT INTO … SELECT FROM应该没问题。

尝试这个:

 INSERT INTO newTable SELECT * FROM initial_Table 

您可以使用子查询插入,如下所示:

 INSERT INTO new_table (columns....) SELECT columns.... FROM initial_table where column=value 

从这里:

 SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename 

您可以使用select into语句。 查看更多在W3Schools 。

如果您要永久传输大量数据,即不填充临时表,则build议使用SQL Server导入/导出数据进行表到表映射。

当您在映射中进行types转换和可能的值截断时,导入/导出工具通常比直接SQL更好。 通常,映射越复杂,使用Integration Services(SSIS)等ETL工具代替直接SQL的效率越高。

导入/导出工具实际上是一个SSIS向导,您可以将您的工作保存为一个dtsx包。

有一个更简单的方法,你不必input任何代码(理想的testing或一次性更新):

步骤1

  • 右键单击资源pipe理器中的表格,然后select“编辑前100行”;

第2步

  • 然后你可以select你想要的行( Ctrl + Click或者Ctrl + A ),然后右键单击并复制( 注意 :如果你想添加一个“ where ”的条件,那么右击Grid – > Pane – > SQL Now您可以编辑查询并添加WHERE条件,然后再次右键单击 – >执行SQL,您所需的行将可用于select底部)

第3步

  • 按照步骤1的目标表。

步骤4

  • 现在转到网格的最后,最后一行在第一列将有一个星号(*) (这一行是添加新条目)。 点击它来select整行,然后粘贴( Ctrl + V )。 该单元格可能有一个红色的Asterix(表示它没有保存)

第5步

  • 点击任何其他行来触发插入语句(红色的Asterix将消失)

注 – 1 :如果列的顺序与目标表中的顺序不相同,则始终可以按照步骤2进行操作,然后按照与目标表中相同的顺序select列

注 –如果你有Identity列然后执行SET IDENTITY_INSERT sometableWithIdentity ON ,然后按照上面的步骤,最后执行SET IDENTITY_INSERT sometableWithIdentity OFF

我想这个声明可能会做你想要的。

 INSERT INTO newTableName (SELECT column1, column2, column3 FROM oldTable); 

insert into stock_take_item_copy (stock_take_id, item_id) select stock_take_id, item_id from mymissingdata

为什么我得到#1062 - Duplicate entry '20239' for key 'PRIMARY' ? 如何改变表中的主键?

  Dim ofd As New OpenFileDialog ofd.Filter = "*.mdb|*.MDB" ofd.FilterIndex = (2) ofd.FileName = "bd1.mdb" ofd.Title = "SELECCIONE LA BASE DE DATOS ORIGEN (bd1.mdb)" ofd.ShowDialog() Dim conexion1 = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" + ofd.FileName Dim conn As New OdbcConnection() conn.ConnectionString = conexion1 conn.Open() 'EN ESTE CODIGO SOLO SE AGREGAN LOS DATOS' Dim ofd2 As New OpenFileDialog ofd2.Filter = "*.mdb|*.MDB" ofd2.FilterIndex = (2) ofd2.FileName = "bd1.mdb" ofd2.Title = "SELECCIONE LA BASE DE DATOS DESTINO (bd1.mdb)" ofd2.ShowDialog() Dim conexion2 = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" + ofd2.FileName Dim conn2 As New OdbcConnection() conn2.ConnectionString = conexion2 Dim cmd2 As New OdbcCommand Dim CADENA2 As String CADENA2 = "INSERT INTO EXISTENCIA IN '" + ofd2.FileName + "' SELECT * FROM EXISTENCIA IN '" + ofd.FileName + "'" cmd2.CommandText = CADENA2 cmd2.Connection = conn2 conn2.Open() Dim dA2 As New OdbcDataAdapter dA2.SelectCommand = cmd2 Dim midataset2 As New DataSet dA2.Fill(midataset2, "EXISTENCIA")