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应该没有问题.
小智 20
试试这个:
INSERT INTO newTable SELECT * FROM initial_Table
Run Code Online (Sandbox Code Playgroud)
小智 12
您可以使用子查询插入,如下所示:
INSERT INTO new_table (columns....)
SELECT columns....
FROM initial_table where column=value
Run Code Online (Sandbox Code Playgroud)
从这里:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
Run Code Online (Sandbox Code Playgroud)
有一种更简单的方法,您无需键入任何代码(非常适合测试或一次性更新):
步骤1
第2步
步骤3
步骤4
步骤5
注意 - 1:如果列的顺序与目标表中的顺序不正确,您始终可以按照步骤 2 进行操作,并按照与目标表中相同的顺序选择列
注 - 2 - 如果您有 Identity 列,则执行SET IDENTITY_INSERT sometableWithIdentity ON,然后按照上述步骤操作,最后执行SET IDENTITY_INSERT sometableWithIdentity OFF