【发布时间】:2010-10-09 06:04:17
【问题描述】:
我正在尝试将一个表的所有值插入到另一个表中。但是插入语句接受值,但我希望它接受来自 initial_Table 的 select *。这可能吗?
【问题讨论】:
标签: sql sql-server sql-server-2005
我正在尝试将一个表的所有值插入到另一个表中。但是插入语句接受值,但我希望它接受来自 initial_Table 的 select *。这可能吗?
【问题讨论】:
标签: sql sql-server sql-server-2005
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 应该没问题。
【讨论】:
试试这个:
INSERT INTO newTable SELECT * FROM initial_Table
【讨论】:
您可以使用子查询插入如下:
INSERT INTO new_table (columns....)
SELECT columns....
FROM initial_table where column=value
【讨论】:
来自here:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
【讨论】:
您可以使用select into 语句。 See more at W3Schools.
【讨论】:
有一种更简单的方法,您无需输入任何代码(非常适合测试或一次性更新):
第一步
第 2 步
第 3 步
第四步
第 5 步
注意 - 1:如果列的顺序与目标表中的顺序不正确,您始终可以按照步骤 2,并按照与目标表中相同的顺序选择列 p>
注意 - 2 - 如果你有身份列然后执行SET IDENTITY_INSERT sometableWithIdentity ON然后按照上面的步骤,最后执行SET IDENTITY_INSERT sometableWithIdentity OFF
【讨论】:
如果您要永久传输大量数据,即不填充临时表,我建议您使用 SQL Server Import/Export Data 进行表到表映射。
当您在映射中进行类型转换和可能的值截断时,导入/导出工具通常比直接 SQL 更好。通常,您的映射越复杂,使用集成服务 (SSIS) 等 ETL 工具而不是直接 SQL 的效率就越高。
导入/导出工具实际上是一个 SSIS 向导,您可以将您的工作保存为 dtsx 包。
【讨论】:
我认为这句话可能会如你所愿。
INSERT INTO newTableName (SELECT column1, column2, column3 FROM oldTable);
【讨论】:
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")
【讨论】: