SELECT INTO 和 INSERT INTO SELECT 两种表复制语句

2014/04/02 1988点热度 0人点赞 0条评论

    Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了。

 INSERT INTO SELECT语句

   语句形式为:

 Insert into Table2(field1,field2,...) select value1,value2,... from Table1

      要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下:

   --1.创建测试表
    create TABLE Table1
    (
        a varchar(10),
        b varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED(a ASC)
    ) ON [PRIMARY]

    create TABLE Table2
    (
        a varchar(10),
        c varchar(10),
        d int,
        CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED( a ASC)
    ) ON [PRIMARY]
     --2.创建测试数据
    Insert into Table1 values('赵','asds','90')
    Insert into Table1 values('钱','asds','100')
    Insert into Table1 values('孙','asds','80')
    Insert into Table1 values('李','asds',null)
    --3.INSERT INTO SELECT语句复制表数据
    Insert into Table2(a, c, d) select a,c,5 from Table1
     --4.显示更新后的结果
    select * from Table2
     --5.删除测试表
    drop TABLE Table1
    drop TABLE Table2

SELECT INTO FROM语句

 语句形式为:

SELECT vale1, value2 into Table2 from Table1

 要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。示例如下:

     --1.创建测试表
    create TABLE Table1
    (   a varchar(10),
        b varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED (a ASC)
    ) ON [PRIMARY]
    --2.创建测试数据
    Insert into Table1 values('赵','asds','90')
    Insert into Table1 values('钱','asds','100')
    Insert into Table1 values('孙','asds','80')
    Insert into Table1 values('李','asds',null)
     --3.SELECT INTO FROM语句创建表Table2并复制数据
    select a,c INTO Table2 from Table1
     --4.显示更新后的结果
    select * from Table2
     --5.删除测试表
    drop TABLE Table1
    drop TABLE Table2

利用带关联子查询Update语句更新数据

     Update是T-sql中再简单不过的语句了,update table set column=expression  [where condition],我们都会用到。但update的用法不仅于此,真正在开发的时候,灵活恰当地使用update可以达到事半功倍的效果。

    假定有表Table1(a,b,c)和Table2(a,c),现在Table1中有些记录字段c为null,要根据字段a在Table2中查找,取出字段a相等的字段c的值来更新Table1。一种常规的思路,通过游标遍历Table1中字段c为null的所有记录,在循环体内查找Table2并进行更新,即用游标Cursor的形式。测试sql语句如下:

  --1.创建测试表
    create TABLE Table1
    (   a varchar(10),
        b varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED(a ASC)
    ) ON [PRIMARY]

    create TABLE Table2
    (   a varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED(a ASC )
    ) ON [PRIMARY]
    --2.创建测试数据
    Insert into Table1 values('赵','asds',null)
    Insert into Table1 values('钱','asds','100')
    Insert into Table1 values('孙','asds','80')
    Insert into Table1 values('李','asds',null)

    Insert into Table2 values('赵','90')
    Insert into Table2 values('钱','100')
    Insert into Table2 values('孙','80')
    Insert into Table2 values('李','95')
    select * from Table1
    --3.通过Update方式更新
    Update Table1 set c = (select c from Table2 where a = Table1.a) where c is null
    --4.显示更新后的结果
    select * from Table1
    --5.删除测试表
    drop TABLE Table1
    drop TABLE Table2

yxkong

这个人很懒,什么都没留下

文章评论