当前位置:  数据库>sqlserver

带关联子查询Update语句更新数据的例子

    来源: 互联网  发布时间:2014-08-29

    本文导语:  本节内容: 带关联子查询的Update语句更新数据 Update是T-sql中很简单易用的语句,update table set column=expression  [where condition],都会用到。 在t-sql开发时,灵活恰当地使用update可以达到事半功倍的效果。 假定有表Table1(a,b,c)和Ta...

本节内容:
带关联子查询的Update语句更新数据

Update是T-sql中很简单易用的语句,update table set column=expression  [where condition],都会用到。
在t-sql开发时,灵活恰当地使用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]
GO
--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)
---www.
Insert into Table2 values('赵','90')
Insert into Table2 values('钱','100')
Insert into Table2 values('孙','80')
Insert into Table2 values('李','95')
GO
select * from Table1

--3.通过游标方式更新
declare @name varchar(10)
declare @score varchar(10)
declare mycursor cursor for select a from Table1 where c is null
open mycursor
fetch next from mycursor into @name
while(@@fetch_status = 0)
BEGIN
  select @score=c from Table2 where a=@name
  update Table1 set c = @score where a = @name
  fetch next from mycursor into @name
END
close mycursor
deallocate mycursor
GO
--4.显示更新后的结果
select * from Table1
GO
--5.删除测试表
drop TABLE Table1
drop TABLE Table2
 

使用游标可以实现,但代码稍显复杂。
其实用Update根据子关联来更新只要一条语句即可搞定,测试代码:
 

代码示例:

--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]
GO
--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)
---www.
Insert into Table2 values('赵','90')
Insert into Table2 values('钱','100')
Insert into Table2 values('孙','80')
Insert into Table2 values('李','95')
GO
select * from Table1

--3.通过Update方式更新
Update Table1 set c = (select c from Table2 where a = Table1.a) where c is null
GO

--4.显示更新后的结果
select * from Table1
GO
--5.删除测试表
drop TABLE Table1
drop TABLE Table2


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 执行文件和数据文件关联(文件关联)
  • c++ STL关联式容器Map成员函数介绍及查找(find()),插入(insert()),删除(erase())等操作代码举例
  • 请教kde中的文件关联机理?
  • awk提取两个关联数组里相等的元素
  • 分布式日志处理和关联分析引擎 MassLogProcess
  • ThinkPHP中的关联模型注意点
  • 请问从一个SERVLET中如何能访问JSP关联的BEAN呀??
  • RedHatEnterprise5下,怎样自动安装有关联的 RPM包???急!!!!
  • 在linux下怎么注册软件,实现文件的关联?
  • 解决:未与信任SQL Server连接相关联的问题
  • 求uni下进程和端口关联查看的shell
  • 关联程序的启动
  • 如何创建文件关联?
  • 菜鸟问题:如何让jsp来获取与之关联的java 数据(赚分了)
  • 对象的一对一关联怎么表达?
  • mime改文件关联
  • 与文件和目录关联的的运行时限制?
  • Sql Server中一个表2个字段关联同一个表(代码解决)
  • 如何在HOME接口里添加find方法并建立数据库关联,用的是JB
  • LINUX下如何实现文件关联并能让文件双击打开


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3