insert into (select from)表复制+select into from表复制

Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了。

 

1.INSERT INTO (SELECT FROM)语句(可连表、可加限制条件where子句)

  语句形式为:INSERT INTO table2(a,b,d) (SELECT a,b,d FROM table1)

  1.1SQL 将T_COMMISSION_TYPE 和T_PRODUCT_TYPE表的一些数据复制到T_COMMISSION中,部分字段复制!

       一种策略对应1W多种产品,批量1W条。

INSERT INTO T_COMMISSION 
(TYPE_NUM,PRODUCT_NUM,FAST_COMMISSION,CREATE_DATE,EMPLOYEE_ID
,OTHER_FAST_COMMISSION,MONEY,FAST_PRICE,ALL_FAST_COMMISSION
,OTHER_FAST_PRICE,ALL_FAST_PRICE) 
(SELECT T1.TYPE_NUM,T2.PRODUCT_NUM,0,SYSDATE,'15145117218',0
,T2.MONEY,T2.MONEY,0,T2.MONEY,T2.MONEY 
FROM T_COMMISSION_TYPE T1,T_PRODUCT_TYPE T2 WHERE T1.TYPE_NUM='default_type')

1.2 sqlMap文件TCommissionType.xml

<insert id="insertCommission" parameterClass="com.hanpeng.base.phone.model.TCommissionType">
INSERT INTO T_COMMISSION 
(TYPE_NUM,PRODUCT_NUM,FAST_COMMISSION,CREATE_DATE,EMPLOYEE_ID,OTHER_FAST_COMMISSION
,MONEY,FAST_PRICE,ALL_FAST_COMMISSION,OTHER_FAST_PRICE,ALL_FAST_PRICE) 
(SELECT T1.TYPE_NUM,T2.PRODUCT_NUM,0,SYSDATE,#employeeId#,0,T2.MONEY,T2.MONEY,0,T2.MONEY,T2.MONEY 
FROM T_COMMISSION_TYPE T1,T_PRODUCT_TYPE T2 WHERE T1.TYPE_NUM=#typeNum#)
</insert>
 

1.3 CommissionTypeAction

	/**
	 * 添加策略类型
	 * @throws IOException 
	 */
	public String addCommType() throws IOException
	{
		if("true".equals(initLoadMethod)){
			successPath = "/jsp/phone/priceStrategy/commissionType/addCommissionType.jsp";
			return SUCCESS;
		}
		else{
			boolean vali = validatePass2(password2);
			
			if(vali){
				try {
					TCommissionType commType = new TCommissionType();
					commType.setTypeNum( SysGuid.newDateGuid("", 30, 16) );//生成流水号
					commType.setTypeName(typeName);
					commType.setTypeInfo(typeInfo);
					commType.setCreateDate(new Date());
					commType.setEmployeeId(this.getUserId());
					
					service.insertCommType(commType);//添加策略,同时批量1W条,为策略分配产品

					setMsg("3002");
				} catch (Exception e) {
					log.error("CommissionTypeAction's addCommType():",e);
				}
			}
			else{
				setMsg("3001");
			}
			outPrint(msg);
			return null;
		}
	}

 

  1.4 CommissionTypeServiceImpl

@Service("CommissionTypeService")
public class CommissionTypeServiceImpl implements CommissionTypeService {

	@Resource(name="CommissionTypeDAO")
	private ICommissionTypeDAO commissionTypeDAO;
	
	public void insertCommType(TCommissionType commissionType)throws SQLException {
		
		commissionTypeDAO.insert(commissionType);
		commissionTypeDAO.addCommission(commissionType);//批量1W条
	}
}
 

 

   1.5 CommissionTypeDAOImpl

@Repository("CommissionTypeDAO")
public class CommissionTypeDAOImpl extends BaseDAOImpl<TCommissionType>
                           implements ICommissionTypeDAO {

   public CommissionTypeDAOImpl() {
        super("TCommissionType");
   }

   /**批量1W条,为策略分配产品*/
   public void addCommission(TCommissionType commissionType) throws SQLException{
       getSqlMapClient().insert("TCommissionType.insertCommission", commissionType);
   }
}
 

 

###SELECT查出需要插入的字段,还可以给固定的值,'15145117218'这样的直接插入的表中。

 

2.SELECT INTO FROM语句

语句形式为:SELECT vale1, value2 into Table2 from Table1

要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中 。示例如下:

--1.创建测试表
     create TABLE Table1
     (
         a varchar(10),
         b varchar(10),
         c varchar(10),
         CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
         (
             a ASC
         )
     ) ON [PRIMARY]
     GO
 
    --2.创建测试数据
     Insert into Table1 values('赵','asds','90')
     Insert into Table1 values('钱','asds','100')
     Insert into Table1 values('孙','asds','80')
     Insert into Table1 values('李','asds',null)
     GO
 
    --3.SELECT INTO FROM语句创建表Table2并复制数据
     select a,c INTO Table2 from Table1
     GO
 
    --4.显示更新后的结果
     select * from Table2
     GO
     --5.删除测试表
     drop TABLE Table1
     drop TABLE Table2

 

####网上其他问题总结:

用select into来复制一些内容。发现在同一个数据库中是可以成功的。但现在我需要从旧的数据库中提取一些信息,新建另一个数据库,然后再放在里面。这个时候,我想用OPENDATASOURCE来代替table2,但是一直不成功,不知楼主有没有做过类似的功能?这个要怎么写?

 

答:这种事儿我干过,我的做法供你参考:
先建立新数据库查询旧数据库的DBLink;
执行语句:CREATE TABLE 新表名 AS SELECT * FROM 旧表名@旧数据库名。
===============
方法比较快捷,唯一的缺点是不能复制表结构

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值