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

时间:2009-02-23 03:23:54

标签: sql sql-server sql-server-2005

我正在尝试将一个表的所有值插入另一个表中。但insert语句接受值,但我希望它接受来自initial_Table的select *。这可能吗?

9 个答案:

答案 0 :(得分:248)

insert语句实际上有一个语法来做到这一点。如果指定列名而不是选择“*”,则会更容易:

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应该没问题。

答案 1 :(得分:17)

试试这个:

INSERT INTO newTable SELECT * FROM initial_Table

答案 2 :(得分:11)

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

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

答案 3 :(得分:6)

来自here:

SELECT *
INTO new_table_name [IN externaldatabase] 
FROM old_tablename

答案 4 :(得分:4)

您可以使用select into语句。 See more at W3Schools

答案 5 :(得分:4)

您可以更轻松地输入任何代码(非常适合测试或一次性更新):

  

第1步

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

第2步

  • 然后您可以选择所需的行( Ctrl +单击 Ctrl + A ),然后右键单击并复制 (注意:如果要添加“ where ”条件,请右键单击网格 - >窗格 - > SQL 现在您可以编辑查询并添加WHERE条件,然后再次右键单击 - >执行SQL,您可以在底部选择所需的行
  

第3步

  • 按照目标表的步骤1进行操作。
  

第4步

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

第5步

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

注意 - 1 :如果列的顺序与目标表中的顺序不正确,则可以始终按照与目标表中相同的顺序执行步骤2和选择列

注意 - 2 - 如果您有标识列,请执行SET IDENTITY_INSERT sometableWithIdentity ON,然后执行上述步骤,最后执行SET IDENTITY_INSERT sometableWithIdentity OFF

答案 6 :(得分:3)

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

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

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

答案 7 :(得分:2)

我认为这句话可能会做你想要的。

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

答案 8 :(得分:0)

 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")