SQL:将所有记录从一个表插入另一个表而不指定列

Jac*_*ack 11 sql sql-server syntax

我想将备份表foo_bk中的所有记录插入foo表而不指定列.

如果我尝试这个查询

INSERT INTO foo 
SELECT *
FROM foo_bk
Run Code Online (Sandbox Code Playgroud)

我将收到错误"插入错误:列名称或提供的值的数量与表定义不匹配".

是否可以在不提供列名的情况下从一个表批量插入到另一个表?我谷歌它但似乎无法找到答案.所有答案都需要特定的列.

HLG*_*GEM 17

你不应该想要这样做.选择*不应该用作插入的基础,因为列可能会被移动并破坏插入(或者更糟糕的是不会破坏插入但是会弄乱你的数据.假设有人在select中添加了一个列而不是在其他表中,您的代码将会中断.或者假设有人因为超出理解但经常发生的原因,决定执行删除并在表上重新创建并将列移动到不同的顺序.现在您的last_name是第一个名称是在原来和select*中会将它放在另一个表中的错误列中.如果无法指定列,并且无法在您感兴趣的表中指定一列到您想要的列的特定映射,那么这是一种非常糟糕的做法.

现在你可能有几个问题,首先两个结构不直接匹配,或者第二个被插入的表有一个标识列,所以即使可插入的列是直接匹配,插入的表还有一列比另一个并且未指定数据库假定您将尝试插入该列.或者您可能具有相同数量的列,但一个是标识,因此无法插入(尽管我认为这将是一个不同的错误消息).


rag*_*fin 11

根据这篇文章:插入...的所有值,您可以执行以下操作:

INSERT INTO new_table (Foo, Bar, Fizz, Buzz)
SELECT Foo, Bar, Fizz, Buzz
FROM initial_table
Run Code Online (Sandbox Code Playgroud)

指定列名称非常重要,如其他答案所示.


小智 10

用这个

SELECT *
INTO new_table_name
FROM current_table_name
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这仅在创建新表时有效.IE它的功能就像一个备份.从声明中可能看起来很明显,但我想重申一下.谢谢!这很有用:) (4认同)

Mic*_*odd 2

您需要至少具有相同数量的列,并且每列必须以完全相同的方式定义,即 varchar 列不能插入到 int 列中。

对于批量传输,请检查您正在使用的 SQL 实现的文档。通常有一些工具可用于将数据从一个表批量传输到另一个表。例如,对于 SqlServer 2005,您可以使用 SQL Server 导入和导出向导。右键单击您要在其中移动数据的数据库,然后单击“导出”以访问它。