SQL SERVER2008到DB2 V9.7的数据迁移

用powerdesigner生成DB2脚本

image

不生成 Foreign key 和Index

image

生成结果:

image

注意的地方,如果是从SQL Server2008生成的脚本

表脚本修改:

1,双引号(“)替换为空字符串

2,NUMERIC类型替换为  DECIMAL

3,image 类型替换为   BLOB(10M)
4,datetime 类型替换为 TIMESTAMP

5,自增长数据类型NUMERIC ,DECIMAL  改为BIGINT或INTEGER

语法如:ConfigCode INTEGER  not null  generated always as identity (start with 1 increment by 1),

如果要导出数据时必须忽略自增长数据列。

 

视图脚本修改:

1,需要加上set current schema dbo;

2 ,DB2的视图里不能直接用order by语句,必须这样写:

select × from(select a,b,c from table1 order by a)as tab

3,凑字段时,用’ ‘as name,不用’’as name

4,to_char(OPERATIONTIME, 'yyyy-mm') AS EXPR1,  替换CONVERT(varchar(7), OperationTime, 120) AS Expr1

5,ISNULL  替换为VALUE

 

其他事项:

数据库权限要至少给DB2ADMIN用户加上DBADM权限

image

表脚本执行结果

image

用SQL Server的数据导出工具导出数据到DB2数据库

image

选择源数据库

image

选择目标数据库,用OLE DB Provider

image

选择ODBC中创建好的DB2数据源

image

选择复制表或视图数据

image

选择目标表,做好映射,用下拉选择。

image

编辑映射按钮弹出列映射窗口,检查选中向目标表中追加行,和映射的数据类型和大小、精度。

image

开始导入

image

导入成功。

image

 

 

存储过程脚本修改:(语句终止字符由;改为@才能执行,很土)

DROP PROCEDURE DBO.SP_VIEWPAGE
@

CREATE PROCEDURE DBO.SP_VIEWPAGE
(
IN ITBNAME VARCHAR(2000),-- 表名
IN ISHOWFIELD VARCHAR(1000),-- 显示字段
IN IJOIN VARCHAR(1000),-- 联接条件(如:内联、外联)
IN IWHERE VARCHAR(2000),-- 查询条件 (注意: 不要加 WHERE)
IN IORDER VARCHAR(100),-- 排序条件 (注意: 不要加 ORDER BY)
IN IPAGESIZE INTEGER,-- 页尺寸 如果为0 默认返回前一百万条数据可以认为是返回所有数据
INOUT IOCURRENTPAGEIX INTEGER,-- 输入和输出:当前页
OUT OPAGESTARTROW INTEGER,-- 输出:当前开始行
OUT OPAGEENDROW INTEGER,-- 输出:当前结束行
OUT OTOTALROWS INTEGER,-- 输出:当前总记录数
OUT OHASPREVIOUSPAGE INTEGER,-- 输出:是否有上一页
OUT OHASNEXTPAGE INTEGER,-- 输出:是否有下一页
OUT OTOTALPAGES INTEGER,-- 输出:总页数
OUT OERROR VARCHAR(1000)-- 输出:错误信息
)
RESULT SETS 1
MODIFIES SQL DATA
NOT DETERMINISTIC
LANGUAGE SQL
BEGIN
-- =============================================
-- AUTHOR:        <xxx>
-- CREATE DATE: <2013-11-14>
-- DESCRIPTION:    存储过程分页
-- 使用实例:CALL DBO.SP_VIEWPAGE('DBO.USERINFO AS A','A.*','','B.AGE>30','B.AGE',10,1,?,?,?,?,?,?,?);
-- =============================================

DECLARE STRSQL   VARCHAR(6000);-- 主语句

DECLARE RESULT CURSOR WITH RETURN TO CALLER FOR S2;

DECLARE EXIT HANDLER FOR SQLEXCEPTION-- 异常捕获
BEGIN
SET OERROR = 'ERROR!'||STRSQL;
END;

-- BODY START --
IF(IWHERE <> '') THEN
SET IWHERE = ' WHERE ' || IWHERE;
END IF;
IF(IORDER <> '') THEN
SET IORDER = 'ORDER BY ' || IORDER;
END IF;
IF(IJOIN <> '') THEN
SET IJOIN = ' ' || IJOIN;
END IF;

SET STRSQL = 'SELECT COUNT(*) FROM ' || ITBNAME || IJOIN || IWHERE;
PREPARE S2 FROM STRSQL;
OPEN RESULT;
FETCH RESULT INTO OTOTALROWS;-- 总记录数
CLOSE RESULT;

IF(IPAGESIZE = 0) THEN
SET IPAGESIZE = 1000000;-- 每页显示数
END IF;

SET OTOTALPAGES = (OTOTALROWS - 1) / IPAGESIZE + 1;-- 总页数

IF(IOCURRENTPAGEIX < 1) THEN
SET IOCURRENTPAGEIX = 1;-- 当前页
ELSE
IF(IOCURRENTPAGEIX > OTOTALPAGES) THEN
SET IOCURRENTPAGEIX = OTOTALPAGES;
END IF;
END IF;

SET OPAGESTARTROW = IPAGESIZE * (IOCURRENTPAGEIX -1) + 1;-- 每页开始数
IF(IOCURRENTPAGEIX = OTOTALPAGES) THEN
SET OPAGEENDROW = OTOTALROWS;-- 每页结束数
ELSE
SET OPAGEENDROW = IPAGESIZE * IOCURRENTPAGEIX;
END IF;

IF(IOCURRENTPAGEIX > 1) THEN
SET OHASPREVIOUSPAGE = 1;-- 是否有上一页
ELSE
SET OHASPREVIOUSPAGE = 0;
END IF;

IF(IOCURRENTPAGEIX < OTOTALPAGES) THEN
SET OHASNEXTPAGE = 1;-- 是否有下一页
ELSE
SET OHASNEXTPAGE = 0;
END IF;

SET STRSQL = 'SELECT * FROM (SELECT ROWNUMBER() OVER(' || IORDER || ') AS ROWNUM,'
|| ISHOWFIELD
|| ' FROM '
|| ITBNAME
|| IJOIN
|| IWHERE
|| ') AS TEMP WHERE ROWNUM BETWEEN ' || RTRIM(CHAR(OPAGESTARTROW)) || ' AND '

|| RTRIM(CHAR(OPAGEENDROW));
PREPARE S2 FROM STRSQL;
OPEN RESULT;
-- BODY END --

END
@

 

执行结果:

image

转载于:https://my.oschina.net/dapp/blog/175770

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值