update关联其他表批量更新数据-跨数据库-跨服务器Update时关联表条件更新
1.有时在做项目时会有些期初数据更新,从老系统更新到新系统。如果用程序循环从老系统付给新系统。
2.有时在项目中需要同步程序,或者自动同步程序时会有大量数据更新就可能用到如下方法了。
3.为了做分析,需要整合一些数据到一个表中,涉及到通过主键关联多个表,获取其中的某些字段的值,通过update可以简单实现,找了一篇文章,挺不错:
批量更新表时,update一个表的列时,需要依赖另外的表,这种依赖可以是where条件子句,也可以要update的field的值依赖另外的表
通常有两种做法
1.使用存储过程
2.在程序代码里逐条循环执行
3.有一种更高效、简洁的做法,批量更新SQL ,一句SQL就可以替代麻烦的循环过程,有MS SQLServer、Oracle、DB2下的写法
UPDATE kcm02
SET kcjhcb = V_U8_Inventory.iInvRCost,kccbhs = V_U8_Inventory.cValueType
FROM V_U8_Inventory
WHERE V_U8_Inventory.cInvCode = kcm02.kcwpdm
另如果需要跨库跨服务器更新的时候用如下语法:跨库设置参照:http://www.cnblogs.com/spring_wang/p/3370750.html
update kcm02
set kcjhcb = Inventory.kcjhcb,kccbhs = Inventory.kccbhs
from OPENDATASOURCE ('SQLOLEDB',
'Data Source=192.168.1.3;
USER ID = sa ;Password=123' ).yzerp.dbo.kcm02 as Inventory
where Inventory.kcwpdm = kcm02.kcwpdm
--其它参考如下----------------------------------------------------
--关键点:t4和t1是同一个table,primary key肯定也是同一个,
--并以它进行关联,这样在 select语句里即可引用到要update的表的fields
UPDATE Table1 AS t1
SET (Field1,Field2) = (SELECT Field21, Field22
FROM Table2 t2
INNER JOIN Table3 t3
ON t3.Field31 = t2.Field23
INNER JOIN Table4 t4
ON t3.Field32 = t4.Filed41
WHERE t2.Field24 >= ''
AND t1.fId = t4.fId);
----------------------------MS SQLServer --------------------------------------
UPDATE t1
SET Field1 = Field21, Field2 = Field22
FROM Table2 t2
INNER JOIN Table3 t3
ON t3.Field31 = t2.Field23
INNER JOIN Table4 t4
ON t3.Field32 = t4.Filed41
WHERE ((t2.Field24 >= '')
AND t1.fId = t4.fId);
----------------------------Oracle --------------------------------------------
UPDATE Table1 t1
SET (Field1,Field2) = (SELECT Field21, Field22
FROM Table2 t2
INNER JOIN Table3 t3
ON t3.Field31 = t2.Field23
INNER JOIN Table4 t4
ON t3.Field32 = t4.Filed41
WHERE ((t2.Field24 >= '')
AND t1.fId = t4.fId))
WHERE EXISTS (SELECT Field21, Field22
FROM Table2 t2
INNER JOIN Table3 t3
ON t3.Field31 = t2.Field23
INNER JOIN Table4 t4
ON t3.Field32 = t4.Filed41
WHERE ((t2.Field24 >= '')
AND t1.fId = t4.fId));
---------------------------------DB2 ------------------------------------------
UPDATE Table1 AS t1
SET (Field1,Field2) = (SELECT Field21, Field22
FROM Table2 t2
INNER JOIN Table3 t3
ON t3.Field31 = t2.Field23
INNER JOIN Table4 t4
ON t3.Field32 = t4.Filed41
WHERE ((t2.Field24 >= '')
AND t1.fId = t4.fId))
WHERE EXISTS (SELECT Field21, Field22
FROM Table2 t2
INNER JOIN Table3 t3
ON t3.Field31 = t2.Field23
INNER JOIN Table4 t4
ON t3.Field32 = t4.Filed41
WHERE ((t2.Field24 >= '')
AND t1.fId = t4.fId));
作者:王春天 2013.11.12 地址:http://www.cnblogs.com/spring_wang/p/3418903.html
update关联其他表批量更新数据-跨数据库-跨服务器Update时关联表条件更新的更多相关文章
- 【C#-批量插入数据到数据库】DataTable数据批量插入数据的库三种方法:SqlCommand.EcecuteNonQurery(),SqlDataAdapter.Update(DataTable) ,SqlBulkCopy.WriteToServer(Datatable)
第一种方法:使用SqlCommand.EcecuteNonQurery() 效率最慢 第二种方法:使用SqlDataAdapter.Update(DataTable) 效率次之 第三种方法:使用 ...
- java批量插入数据进数据库中
方式1: for循环,每一次进行一次插入数据. 方式2: jdbc的preparedStatement的batch操作 PreparedStatement.addBatch(); ...... Pre ...
- C# 使用 SqlBulkCopy 类批量复制数据到数据库
最近公司需要优化导入的问题,由于之前使用的方式是生成 Insert 语句插入数据库,数据量小的时候还行,但是随着发展数据量渐渐大了,之前的方法性能就跟不上了,于是发现了 SqlBulkCopy 这个类 ...
- 通过POI实现上传EXCEL的批量读取数据写入数据库
最近公司新增功能要求导入excel,并读取其中数据批量写入数据库.于是就开始了这个事情,之前的文章,记录了上传文件,本篇记录如何通过POI读取excel数据并封装为对象上传. 上代码: 1.首先这是一 ...
- oracle跨数据库跨用户訪问注意事项
java代码中不同意出现oracle的username.数据链路名. 跨用户.跨数据库的訪问必须在oracle中建同义词或视图来实现.在java代码中仅仅需当做当前用户下的对象处理.
- SqlBulkCopy 批量复制数据到数据库
1.简介 1.MSDN 核心方法:SqlBulkCopy.WriteToServer 将所有行从数据源复制到 SqlBulkCopy 对象的 DestinationTableName 属性指定的目标表 ...
- DataGridView更新数据到数据库
WinFrom程序绑定了一个DataGridView控件,我需要添加一个button按钮来更改状态,还需要把更新之后的状态更新到数据库,如下图所示的这样: 首先先来拖控件,把界面做出来,自己拖一个Da ...
- mybatis- spring 批量实现数据导入数据库
终于实现了ibatis的批量插入,此方法插入3000条数据,比单条插入可以节省一半的时间XML代码: <insert id="insertBatch" parameterTy ...
- Django---form表单提交数据到数据库(普通方法+Django的form类)
目标: ①.初始form的简单应用 ②.使用Django的form组件完成新增一个帖子 方法一:普通方法 1.前端表单代码 <div> <form class="navba ...
随机推荐
- loadrunner脚本001
Action() { ; lr_start_transaction("login"); web_add_cookie("JSESSIONID=061460B7DFF2F7 ...
- tcp线程聊天
.ServerThread package serverclient; import java.io.BufferedReader; import java.io.InputStreamReader; ...
- linux目录结构介绍
目录 1.树状目录结构图 2./目录 3./etc/目录 4./usr/目录 5./var/目录 6./proc/目录 7./dev/目录 该文章主要来自于网络进行整理. 目录结构参考地址: http ...
- 理解CPU steal time
http://melody-dc.com/2015/11/21/%E7%90%86%E8%A7%A3CPU-steal-time/ http://www.cnblogs.com/yjf512/p/33 ...
- iOS变量定义在 .h 还是 .m 中
前言 曾经我定义变量一直都是定义在.h文件里.后来看别人的代码,发现非常多人都把一些变量定 义在.m文件里. 后来我自己试了一把,发现变量既能够定义在.h文件里也能够定义在.m文 件中,尽管这是个非常 ...
- Knockout JS 增加、去除、修改绑定
Knockuot js 似乎只考虑过怎么绑定(ko.applyBindings()),却没考虑过怎么去除绑定,当修改了DOM内容,需要重新绑定时,发现似乎无能为力. 一.解决办法 这里有一个重新绑定的 ...
- redis数据淘汰策略
概述 在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的.譬如,在一台 8G 机子上部署了 4 个 redis 服务点,每一个服务点分配 ...
- mysql计算时间差值,单位分钟数
TIMESTAMPDIFF(MINUTE, 开始时间, 结束时间) as 时间差(单位:分钟数) TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr ...
- django之环境变量配置
1.配置python变量环境,C:\Python27\;C:\Python27\Scripts\ 2.配置django变量环境,C:\Python34\Lib\site-packages\Django ...
- python之模块 os
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块 os import os ''' FUNCTIONS abort(...)#暂不了解 a ...