一,工具准备
【IBM Migration Toolkit】 以及【使用方法】
这里没有总结IBM Migration Toolkit是如何使用和安装的,主要是把我在实际从SQLServer存储过程到DB2的转换所遇到的一些问题进行一下总结。
二,问题整理
1,TOP的问题
由于SQLServer里可以使用TOP,指定结果集返回多少行记录,但是DB2里是没有TOP关键字的,所以在转换 过程中应该注意以下几点:
①,在转换之前应将MS存储过程里的所有TOP关键字删除,然后在利用MTK进行转换
②,用【row_number() over() 】修改转换后的SQL,参照以下例子:
DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT TRACKING_NUM, CUSTOMER_NAME, DATA
FROM(
SELECT TRACKING_NUM, CUSTOMER_NAME, DATA, row_number() over() as rown
FROM XYZ123.CUSTINFO
ORDER BY TRACKING_NUM ASC
) t
WHERE rown <= N
注意红色的部分,可以通过rown来控制返回的行数,当然N是个变量,在这里还说下,DB2还有另一种可以返回指定行数的方法,FETCH FIRST rownum ROWS ONLY,但问题就是这里的rownum在存储过程里不能用变量代替,所以不推荐使用,除非返回的行数是固定的。
2,位运算符
DB2本身不支持& |的位操作,但可以通过用户定义函数(User-Defined Function UDF)来实现位运算功能。
参考资料:http://bytes.com/groups/ibm-db2/185311-poor-query-performance
在C:/Program Files/IBM/SQLLIB/samples/c目录下
新建udfbit.sqc文件
新建udfbit.clp文件
新建udfbit.def文件
代码参见附录/C_UDF_CODE
打开DB2的Command窗口,执行以下命令
-->DB2 Connect to DB名 user 用户名 using 密码
-->bldrtn udfbit
打开DB2的Command编辑器,执行以下SQL