我正在查看在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,併爲我們的每個環境定義了所有數據源名稱,因此我不需要手動創建提供程序字符串。 –