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

发布时间:2020-01-12编辑:脚本学堂
本文介绍下,sql中带关联子查询的Update语句更新数据的实例代码,有需要的朋友参考下吧。

本节内容:
带关联子查询的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.jb200.com
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.jb200.com
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