网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > 数据库 > 正文

利用带关联子查询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. --1.创建测试表 
  2.   create TABLE Table1 
  3.   ( 
  4.       a varchar(10), 
  5.       b varchar(10), 
  6.       c varchar(10), 
  7.       CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED 
  8.       ( 
  9.           a ASC 
  10.       ) 
  11.   ) ON [PRIMARY
  12.  
  13.   create TABLE Table2 
  14.   ( 
  15.       a varchar(10), 
  16.       c varchar(10), 
  17.       CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED 
  18.       ( 
  19.           a ASC 
  20.       ) 
  21.   ) ON [PRIMARY
  22.   GO 
  23.   --2.创建测试数据 
  24.   Insert into Table1 values('赵','asds',null
  25.   Insert into Table1 values('钱','asds','100'
  26.   Insert into Table1 values('孙','asds','80'
  27.   Insert into Table1 values('李','asds',null
  28.  
  29.   Insert into Table2 values('赵','90'
  30.   Insert into Table2 values('钱','100'
  31.   Insert into Table2 values('孙','80'
  32.   Insert into Table2 values('李','95'
  33.   GO 
  34.   select * from Table1 
  35.  
  36.   --3.通过游标方式更新 
  37.   declare @name varchar(10) 
  38.   declare @score varchar(10) 
  39.   declare mycursor cursor for select a from Table1 where c is null 
  40.   open mycursor 
  41.   fetch next from mycursor into @name 
  42.   while(@@fetch_status = 0) 
  43.   BEGIN 
  44.       select @score=c from Table2 where a=@name 
  45.       update Table1 set c = @score where a = @name 
  46.       fetch next from mycursor into @name     
  47.   END 
  48.   close mycursor 
  49.   deallocate mycursor 
  50.   GO 
  51.   --4.显示更新后的结果 
  52.   select * from Table1 
  53.   GO 
  54.   --5.删除测试表 
  55.   drop TABLE Table1 
  56.   drop TABLE Table2 

 虽然用游标可以实现,但代码看起来很复杂,其实用Update根据子关联来更新只要一条语句就可以搞定了,测试代码如下:

使用带关联子查询的Update更新

  1. --1.创建测试表 
  2.     create TABLE Table1 
  3.     ( 
  4.         a varchar(10), 
  5.         b varchar(10), 
  6.         c varchar(10), 
  7.         CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED 
  8.         ( 
  9.             a ASC 
  10.         ) 
  11.     ) ON [PRIMARY
  12.  
  13.     create TABLE Table2 
  14.     ( 
  15.         a varchar(10), 
  16.         c varchar(10), 
  17.         CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED 
  18.         ( 
  19.             a ASC 
  20.         ) 
  21.     ) ON [PRIMARY
  22.     GO 
  23.     --2.创建测试数据 
  24.     Insert into Table1 values('赵','asds',null
  25.     Insert into Table1 values('钱','asds','100'
  26.     Insert into Table1 values('孙','asds','80'
  27.     Insert into Table1 values('李','asds',null
  28.  
  29.     Insert into Table2 values('赵','90'
  30.     Insert into Table2 values('钱','100'
  31.     Insert into Table2 values('孙','80'
  32.     Insert into Table2 values('李','95'
  33.     GO 
  34.     select * from Table1 
  35.  
  36.     --3.通过Update方式更新 
  37.     Update Table1 set c = (select c from Table2 where a = Table1.a) where c is null 
  38.     GO 
  39.  
  40.     --4.显示更新后的结果 
  41.     select * from Table1 
  42.     GO 
  43.     --5.删除测试表 
  44.     drop TABLE Table1 
  45.     drop TABLE Table2 
  • 上一篇资讯: SQL基础查询入门(上篇)
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师