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

我试图将一个表的所有值插入到另一个表中。但是 insert 语句接受值,但是我希望它接受初始 _ Table 中的 select * 。这可能吗?

439313 次浏览

插入语句实际上有一种语法可以实现这一点。如果指定列名,而不是选择“ *”,那么会简单得多:

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 语法用于当您希望将新表作为命令的一部分创建时。

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

来自 这里:

SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename

可以使用 select into语句。

我觉得这份声明可能会满足你的要求。

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

如果要永久传输大量数据,即不填充临时表,我建议使用 SQLServer 导入/导出数据进行表到表的映射。

当在映射中有类型转换和可能的值截断时,导入/导出工具通常优于直接 SQL。通常,映射越复杂,使用类似 IntegrationServices (SSIS)的 ETL 工具而不是直接 SQL 的效率就越高。

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

试试这个:

INSERT INTO newTable SELECT * FROM initial_Table
 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")

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

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

有一种更简单的方法,你不必键入任何代码(测试或一次性更新的理想选择) :

第一步

  • 右键单击资源管理器中的表格,选择“编辑前100行”;

第二步

  • 然后可以选择所需的行(Ctrl + ClickCtrl + A) ,右击并复制 (注意: 如果您想添加一个“ 哪里”条件,那么右击 Grid-> Pane-> SQL 现在您可以编辑 Query 并添加 WHERE 条件,然后再次右击-> Execute SQL,您所需要的行将可以在底部选择)

第三步

  • 对于目标表,按照步骤1操作。

第四步

  • 现在转到网格的末尾,最后一行将在第一列中有一个星号 (*)(这一行是为了添加新条目)。单击它选择整个行,然后粘贴(Ctrl + V)。单元格可能有一个红色星号(表示未保存)

第五步

  • 单击任何其他行以触发 insert 语句(Red Asterix 将消失)

注意-1 : 如果列的顺序不如 Target 表中的那样正确,那么您总是可以按照步骤2的顺序,并按照与 Target 表中相同的顺序选择列

注意-2 -如果有 Identity 列,那么执行 SET IDENTITY_INSERT sometableWithIdentity ON,然后执行上述步骤,最后执行 SET IDENTITY_INSERT sometableWithIdentity OFF