用powerdesigner生成DB2脚本

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

不生成 Foreign key 和Index

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

生成结果:

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

注意的地方,如果是从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权限

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

表脚本执行结果

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

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

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

选择源数据库

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

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

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

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

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

选择复制表或视图数据

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

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

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

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

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

开始导入

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

导入成功。

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

 

 

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

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
@

 

执行结果:

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

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

相关文章: