我正在查看在SQL Server中为我们的SSIS包之一创建登台表,以减少对DB2的调用次数,因为当DB2回收非活动连接时,对DB2的调用可能会遇到超时。有没有一种自动方法将表模式从DB2复制到SQL Server?这需要在DB2和SQL Server之间进行1到1的数据类型映射才能实现。如果没有工具存在,我可以自己编写一个工具,因为我们的一些DB2表有20列,在SQL Server中手动重新创建会很麻烦。从DB2复制表模式到SQL Server
0
A
回答
2
我有一个部分工作的脚本,欢迎您使用。我们并不关心DB2中的主键等等,而是关于我们的SQL Server方面。我们唯一关心的是获取数据。另外,我不得不处理的数据仅仅是字符串或日期数据,因此在构建data_type的位置可能对小数不正确。
核心概念是我检查sysibm.syscolumns
以派生所有表和列的列表,然后尝试提供DB2数据类型和SQL Server之间的转换。
反正,给它一个镜头。随时编辑或评论什么是坏的,我会看看我是否可以修复它。
这是使用SQL Server 2012 CONCAT函数和经典字符串连接运算符+
的混合构建的。它还假定OPENQUERY有效,存在Linked服务器。
WITH SRC AS
(
SELECT
OQ.NAME AS column_name
, OQ.TBNAME AS table_name
--, RTRIM(OQ.COLTYPE) AS data_type
, CASE RTRIM(OQ.COLTYPE)
WHEN 'INTEGER' THEN 'int'
WHEN 'SMALLINT' THEN 'smallint'
WHEN 'FLOAT' THEN 'float'
WHEN 'CHAR' THEN CONCAT('char', '(', OQ.LENGTH, ')')
WHEN 'VARCHAR' THEN CONCAT('varchar', '(', OQ.LENGTH, ')')
WHEN 'LONGVAR' THEN CONCAT('varchar', '(', OQ.LENGTH, ')')
WHEN 'DECIMAL' THEN CONCAT('decimal', '(', OQ.SCALE, ')')
WHEN 'DATE' THEN 'date'
WHEN 'TIME' THEN 'time'
WHEN 'TIMESTMP' THEN ''
WHEN 'TIMESTZ' THEN ''
WHEN 'BLOB' THEN ''
WHEN 'CLOB' THEN ''
WHEN 'DBCLOB' THEN ''
WHEN 'ROWID' THEN ''
WHEN 'DISTINCT' THEN ''
WHEN 'XML' THEN ''
WHEN 'BIGINT' THEN ''
WHEN 'BINARY' THEN ''
WHEN 'VARBIN' THEN ''
WHEN 'DECFLOAT' THEN ''
ELSE ''
END AS data_type
, OQ.LENGTH
, OQ.SCALE
, CONCAT(CASE OQ.NULLS WHEN 'Y' THEN 'NOT' ELSE '' END, ' NULL') AS allows_nulls
, OQ.UPDATES AS updateable
FROM
OPENQUERY(LINKED, 'SELECT * FROM abcde01.sysibm.syscolumns T WHERE T.TBCREATOR = ''ABCD'' ') AS OQ
)
, S2 AS
(
SELECT
CONCAT(QUOTENAME(S.column_name), ' ', S.data_type, ' ', S.allows_nulls) AS ColumnDeclaration
, S.table_name
FROM
SRC AS S
)
, MakeItPretty AS
(
SELECT DISTINCT
QUOTENAME(S.TABLE_NAME) AS TABLE_NAME
, STUFF
(
(
SELECT ',' + ColumnDeclaration
FROM S2 AS SI
WHERE
SI.TABLE_NAME = S.TABLE_NAME
FOR XML PATH('')),1,1,''
) AS column_list
FROM
S2 AS S
)
SELECT
CONCAT('CREATE TABLE ', MP.TABLE_NAME, char(13), MP.column_list) AS TableScript
FROM
MakeItPretty AS MP;
相关问题
- 1. 从sql server复制表到db2
- 2. DB2 SQL Server复制
- 3. SQL Server 2008:如何将数据从DB1中的表复制到DB2中的表?
- 4. 从Oracle复制到SQL Server表中
- 5. 将表从Access DB复制到SQL Server
- 6. SSIS:从MySQL复制表到SQL Server 2008
- 7. 从SQL Server 2008复制数据库模式到SQLite
- 8. 将oracle表复制到DB2
- 9. SQL Server表复制
- 10. 模式在DB2 SQL
- 11. 从DB2到SQL Server 2005的视图
- 12. 将SQL Server Express表复制到vs2012的SQL Server CE表中
- 13. 加速ETL DB2到SQL Server?
- 14. IBM DB2到SQL Server迁移
- 15. 从SQL Server表复制或克隆行
- 16. 将数据从本地DB2表追加到远程SQL Server表
- 17. 将数据从sqlite复制到SQL Server
- 18. 将数据从SQL Server复制到Oracle
- 19. 从SQL Server到Oracle的批量复制
- 20. SSIS MySQL复制表到SQL Server
- 21. 将实体框架模型从SQL Server切换到DB2
- 22. SQL Server 2008:复制表结构和模式
- 23. 复制表SQL Server 2008
- 24. 复制SQL Server中的表
- 25. SQL Server Express - 表复制
- 26. 将数据从SQL Server加载到DB2的最佳方式
- 27. 可以以某种方式从SQL Server 2012 Express复制到SQL Server 2012 Express吗?
- 28. 从SQL Server 2005到SQL Server 2012的复制
- 29. 将查询从sql server复制到另一个sql server
- 30. SQL Server到SQL Server CE表数据使用SqlBulkCopy复制
我试着在我的本地SQL Server 2005和SQL Server 2012实例上创建一个链接服务器,但是在获取到DB2的连接方面还没有运气。我正在使用IBM的OLE DB提供程序来创建链接服务器。我们的DB2 DBA在我的机器上安装了DB2 Connect,并为我们的每个环境定义了所有数据源名称,因此我不需要手动创建提供程序字符串。 –