DB2 单张表 merge语句

<span style="font-family: Arial, Helvetica, sans-serif;">merge into CHANNEL_AGENT_PEOPLE_NUMBER_201503 a using (SELECT  ? TIME_ID,? CITY_NAME,? NODE_NAME,? NODE_CODE,? PEOPLE_NUMBER, ? VEHICLE_RUNNING_COSTS,? MAIL_TRANSPORT_FEES,? TRAINING_COSTS, ? CONSUMABLES,? OTHER_OFFICE_EXPENSES FROM SYSIBM.SYSDUMMY1) B  on a.time_id = b.time_id and a.CITY_NAME= b.CITY_NAME AND  A.NODE_NAME = B.NODE_NAME AND A.NODE_CODE = B.NODE_CODE WHEN MATCHED THEN  update  set a.PEOPLE_NUMBER = b.PEOPLE_NUMBER, A.VEHICLE_RUNNING_COSTS =B.VEHICLE_RUNNING_COSTS, A.MAIL_TRANSPORT_FEES= B.MAIL_TRANSPORT_FEES, A.TRAINING_COSTS = B.TRAINING_COSTS, A.CONSUMABLES = B.CONSUMABLES, A.OTHER_OFFICE_EXPENSES = B.OTHER_OFFICE_EXPENSES WHEN NOT MATCHED THEN  INSERT   VALUES( B.TIME_ID,B.CITY_NAME, B.NODE_NAME,B.NODE_CODE,B.PEOPLE_NUMBER,B.VEHICLE_RUNNING_COSTS, B.MAIL_TRANSPORT_FEES,	B.TRAINING_COSTS,B.CONSUMABLES,B.OTHER_OFFICE_EXPENSES)</span>

今天在开发中用到了单张表做merge语句,使用spring jdbctemplate的批量修改,所以要传递参数进去,使用了上面的merge语句完成,在此做个记录。

部分java代码如下:

private void uploadAgentChannel(Workbook workbook, String city, int month) {
		Sheet sheet = workbook.getSheetAt(0);
		List<Object[]> params = new ArrayList<Object[]>();
		for (int i = 3; i < sheet.getLastRowNum(); i++) {
			params.add(new Object[] { month,
					sheet.getRow(i).getCell(0).getStringCellValue(),
					sheet.getRow(i).getCell(1).getStringCellValue(),
					sheet.getRow(i).getCell(2).getStringCellValue(),
					sheet.getRow(i).getCell(3).getNumericCellValue(),
					sheet.getRow(i).getCell(4).getNumericCellValue(),
					sheet.getRow(i).getCell(5).getNumericCellValue(),
					sheet.getRow(i).getCell(6).getNumericCellValue(),
					sheet.getRow(i).getCell(7).getNumericCellValue(),
					sheet.getRow(i).getCell(8).getNumericCellValue() });
		}
		// 要判断对应的月表是否存在,不存在就创建表

		if (!isTableExists("CHANNEL_AGENT_PEOPLE_NUMBER", month)) {
			jdbcTemplate.execute("create table CHANNEL_AGENT_PEOPLE_NUMBER_"
					+ month + " like CHANNEL_AGENT_PEOPLE_NUMBER");
		}
		// 使用merge语句可以修改和插入对应数据
		String sql = "merge into CHANNEL_AGENT_PEOPLE_NUMBER_"
				+ month
				+ " a using (SELECT "
				+ " ? TIME_ID,? CITY_NAME,? NODE_NAME,? NODE_CODE,? PEOPLE_NUMBER,"
				+ " ? VEHICLE_RUNNING_COSTS,? MAIL_TRANSPORT_FEES,? TRAINING_COSTS,"
				+ " ? CONSUMABLES,? OTHER_OFFICE_EXPENSES FROM SYSIBM.SYSDUMMY1) B "
				+ " on a.time_id = b.time_id and a.CITY_NAME= b.CITY_NAME AND "
				+ " A.NODE_NAME = B.NODE_NAME AND A.NODE_CODE = B.NODE_CODE"
				+ " WHEN MATCHED THEN  update  set a.PEOPLE_NUMBER = b.PEOPLE_NUMBER,"
				+ " A.VEHICLE_RUNNING_COSTS =B.VEHICLE_RUNNING_COSTS,"
				+ " A.MAIL_TRANSPORT_FEES= B.MAIL_TRANSPORT_FEES,"
				+ " A.TRAINING_COSTS = B.TRAINING_COSTS, A.CONSUMABLES = B.CONSUMABLES,"
				+ " A.OTHER_OFFICE_EXPENSES = B.OTHER_OFFICE_EXPENSES"
				+ " WHEN NOT MATCHED THEN  INSERT   VALUES( B.TIME_ID,B.CITY_NAME,"
				+ " B.NODE_NAME,B.NODE_CODE,B.PEOPLE_NUMBER,B.VEHICLE_RUNNING_COSTS,"
				+ " B.MAIL_TRANSPORT_FEES,"
				+ "	B.TRAINING_COSTS,B.CONSUMABLES,B.OTHER_OFFICE_EXPENSES)";
		jdbcTemplate.batchUpdate(sql, params);

	}
时间: 2024-11-10 07:26:42

DB2 单张表 merge语句的相关文章

SQL 基础之子查询、多表插入、merge 语句、跟踪一段时间数据变化(二十)

使用子查询处理数据 可以使用子查询中的数据操纵语言(DML)语句: 使用内嵌视图检索数据 从一张表向另一张表复制数据 基于另一张表的值更新表中数据 基于另一张表的值删除表中的行 使用子查询作为数据源检索数据 select department_name, city from departments natural join (select l.location_id, l.city, l.country_id from loc l join countries c on(l.country_id

【转载】SQL Server - 使用 Merge 语句实现表数据之间的对比同步

原文地址:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT 或者 UPDATE 等.包括在 SSIS Package 中也可以通过 Lookup, Condition Split 等多种 Task 的组合来实现表数据之间的同步.在这里 "同步" 的意思是指每次执行一段代码的时候能够确保 A 表的数据和 B 表的数据始终相同. 可以通过 SQL Se

DB2建表语句

db2 => create table test (name char(8) not null primary key,depid smallint,pay bigint) DB20000I SQL 命令成功完成. db2 => create table test1 (name char(8) not null primary key,depid smallint references department (depid),pay bigint) DB20000I SQL 命令成功完成. db

Sql server的Merge语句,源表中如果有重复数据会导致执行报错

用过sql server的Merge语句的开发人员都应该很清楚Merge用来做表数据的插入/更新是非常方便的,但是其中有一个问题值得关注,那就是Merge语句中的源表中不能出现重复的数据,我们举例来说明这个问题. 现在我们有一张表叫T_Class_A,其建表语句如下: CREATE TABLE [dbo].[T_Class_A]( [ID] [int] IDENTITY(1,1) NOT NULL, [ClassName] [nvarchar](50) NULL, [StudentTotalCo

SQL Server - 使用 Merge 语句实现表数据之间的对比同步

原文:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT 或者 UPDATE 等.包括在 SSIS Package 中也可以通过 Lookup, Condition Split 等多种 Task 的组合来实现表数据之间的同步.在这里 "同步" 的意思是指每次执行一段代码的时候能够确保 A 表的数据和 B 表的数据始终相同. 可以通过 SQL Serv

通过merge语句完成表数据同步

此例中需要将center库中的tb_sys_sqlscripe表同步到branch,简单的语法如下:   merge into [email protected] b using tb_sys_sqlscripe c on (b.pk=c.pk) --从center将表merge到branch,同步的依据是两个表的pk when matched then update set b.sqlscripe=c.sqlscripe,b.author=c.author --如果pk值是相同则将指定表的值更

Oracle中MERGE语句的使用

Oracle在9i引入了merge命令, 通过这个merge你能够在一个SQL语句中对一个表同时执行inserts和updates操作. 当然是update还是insert是依据于你的指定的条件判断的,Merge into可以实现用B表来更新A表数据,如果A表中没有,则把B表的数据插入A表. MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表 语法如下 MERGE INTO [your table-name] [rename your table her

如何理解T-SQL中Merge语句

写在前面的话:之前看过Merge语句,感觉没什么用,完全可以用其他的方式来替代,最近又看了看Merge语句,确实挺好用,可以少写很多代码,看起来也很紧凑,当然也有别的优点. ====正文开始===== SQL Server 2008 引入了Merge关键字,主要是在一条语句里面可以执行insert.update.delete操作,以实现用一个源对象的数据对目标对象数据进行操作.注意这里的”源对象“和”目标对象“我用黑色标注了,源对象和目标对象实际上不仅仅可以是表Table,还可以是临时表.视图.

Linux命令:MySQL系列之十三--MySQL备份与还原(针对单张表SELECT备份)

对于只备份单张表的备份与还原,通过SELECT命令,可以更快速的达到备份和恢复的目的: 以及通过此方法把一个数据库中表的数据,导入至另一数据库的表中去. 备份格式:SELECT * INTO OUTFILE '/PATH/TO/somefile.txt' FROM table_name [WHERE CLAUSE]; #备份table_name表中的[或者备份满足WHERE语句的数据]数据至服务器上保存. 注释:table_name:需要备份的表  WHERE:满足的条件,可选项. /PATH/