select into from
用来创建一个目标表(目标表不存在),并用查询返回的结果来填充它。
语法
完整:select *into table_new from table_old;
1)不能用这个语句向已经存在的表中插入数据,因为插入时会自动创建一张新表。
2)目标表的结构和数据依赖于来源表。
3)select into句会复制来源表的基本结构(列名,数据类型,是否允许为null及identity属性)和数据。
不过select into语句不会复制:约束,索引以及触发器。
注释:表结构 就是数据表包含的列, 列的数据类型, 列的宽带,索引, 约束,主外键 ,存储过程,函数,触发器等。
select into 语句的一个优点是:只要不把‘恢复模式(Recovery model)’的数据库属性设置成FULL(完整恢复模式),select into就会按照最小日志记录模式来执行操作。相比完整日志记录模式,在最小日志记录模式下可以进行进行非常快速的操作。
注释:恢复模式 在数据里面 属性—》选项—》恢复模式
如果想使用带有集合操作的select into语句,应该把select into放到第一个查询的from字句之前。
insert into select
insert into select 语句是将一组由select查询返回的结果插入到目标表(已经存在)。
语法
两张字段数量不一致,选择相同字段或者只针对性的选择部分数据
insert into table2(column1,column2)select column1,column2 from table1;
或
insert into table2 select *from table1;
(全部复制过去要保证字段数量一致)
还有备份数据的sql语句:
create table newtable as select *from oldtable;(在sql server里面不适用)
只复制表的结构语句:
select *into table_new from table_old where 1=0;
二者插入数据快慢比较:
insert into 下,是将选择好的结果集一个一个插入一个已存在的表内。
select * into 是将一个选择出来的结果集保存到一个即将创建的表内。
前者是首先选出结果集,然后根据结果集内的每条记录,寻找 IAM页,找到空白页,然后插入记录,如此循环将所有结果集插入进来。
后者则是将一个选出来的结果集直接保存成一个新表,当然这个速度要快于挨个的向IAm页讨求空间来插入!
IAM(Identity and Access Management 的缩写),即“身份识别与访问管理”,具有单点登录、强大的认证管理、基于策略的集中式授权和审计、动态授权、企业可管理性等功能。