我正在尝试将一个表的所有值插入另一个表中。但insert语句接受值,但我希望它接受来自initial_Table的select *。这可能吗?
答案 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步
第2步
第3步
第4步
第5步
注意 - 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")