【发布时间】:2012-01-23 12:59:25
【问题描述】:
说table1和table2已经存在,这些查询有什么区别
查询1:-
select * into table1 from table2 where 1=1
查询2:-
insert into table1 select * from table2
【问题讨论】:
-
INSERT INTO vs SELECT INTO 和其他几个的可能重复
说table1和table2已经存在,这些查询有什么区别
查询1:-
select * into table1 from table2 where 1=1
查询2:-
insert into table1 select * from table2
【问题讨论】:
select * into table1 from table2 where 1=1 创建 table1 并将 table2 的值插入其中。因此,如果表已创建,则该语句会出错。
insert into table1 select * from table2 只在 table1 中插入 table2 的值。
【讨论】:
第一个 (SELECT INTO) 将创建并填充一个新表,第二个 (INSERT... SELECT) 将插入到现有表中。
在 2008 年之前的 SQL Server 版本中,第一个可以最低限度地记录,而第二个则不是 this is no longer true。
【讨论】:
select * into table1 from table2 where 1=1
上面的查询要求表不存在。您无需指定列,因为所有列都是在从源表中检索时创建的。
insert into table1 select * from table2
对于上述查询,您需要一个 EXISTING table1。 两个表中的列的顺序也应该完全相同,否则需要为两个表提供列列表。
【讨论】:
在下面的查询中,table1 将被创建,如果它已经存在则会抛出错误
select * into table1 from table2 where 1=1
在下面的查询中,表table1必须在运行命令之前存在
insert into table1 select * from table2
【讨论】:
INSERT INTO TABLE_A SELECT * FROM TABLE_B
是一个常用语句,用于将一个表的值插入到另一个表中。也可以使用它插入选定的列。
SELECT * INTO TABLE_A FROM TABLE_B
将创建一个填充有 TABLE_B 值的新 TABLE_A
【讨论】:
a) select * into table1 from table2 where 1=1 - 如果 table1 和 table2 已经存在,执行查询时会出现以下错误。 “消息 2714,第 16 级,状态 6,第 1 行 数据库中已经有一个名为 'table1' 的对象"
b) 插入 table1 选择 * from table2 - 如果 table1 与 table2 重复,则此查询考虑普通插入语句 Exp: select * into table1 from table2 where 1=0 不管怎样,每次执行查询都会累积重复数据。
【讨论】: