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

Vin*_*nod 119 sql sql-server sql-server-2005

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

Mat*_*ton 253

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

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

我最好澄清这一点,因为出于某种原因,这篇文章得到了一些低票.

INSERT INTO ... SELECT FROM语法适用于您插入的表(上例中的"new_table")已存在的情况.正如其他人所说,SELECT ... INTO语法适用于您希望在命令中创建新表的时间.

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

  • Wha--?有人想给我一个评论,解释为什么这篇文章产生了低票?我在OPs问题中没有看到任何指定新表应该作为查询的一部分创建的内容. (3认同)

小智 20

试试这个:

INSERT INTO newTable SELECT * FROM initial_Table
Run Code Online (Sandbox Code Playgroud)

  • 当我们有标识列时使用星标时不起作用 (2认同)

小智 12

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

INSERT INTO new_table (columns....)
SELECT columns....
FROM initial_table where column=value
Run Code Online (Sandbox Code Playgroud)


Otá*_*cio 7

这里:

SELECT *
INTO new_table_name [IN externaldatabase] 
FROM old_tablename
Run Code Online (Sandbox Code Playgroud)


Mah*_*esh 6

有一种更简单的方法,您无需键入任何代码(非常适合测试或一次性更新):

步骤1

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

第2步

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

步骤3

  • 对于目标表,请执行步骤 1。

步骤4

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

步骤5

  • 单击任何其他行都会触发插入语句(红色星号将消失)

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

注 - 2 - 如果您有 Identity 列,则执行SET IDENTITY_INSERT sometableWithIdentity ON,然后按照上述步骤操作,最后执行SET IDENTITY_INSERT sometableWithIdentity OFF