首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 到 Oracle 數據類型映射對照表:MSdatatype_mappings 與 sysdatatypemappings 系統視圖查詢指南

     編輯:關於SqlServer

查詢系統映射視圖

-- SQL Server → Oracle 類型映射(高層)
SELECT * FROM msdb.dbo.MSdatatype_mappings;

-- 詳細映射(含源/目標類型、精度、縮放、可空性)
SELECT * FROM msdb.dbo.sysdatatypemappings;

核心映射對照表(節選常用類型)

SQL Server 類型Oracle 類型備註
bigintNUMBER(19)
binary / varbinary / imageBLOB / RAWBLOB 對應 MAX 長度,RAW 對應定長
bitNUMBER(1)
char / varchar / textCHAR / VARCHAR2 / CLOBMAX 長度類型映射為 CLOB
datetime / smalldatetimeDATEOracle DATE 含時間
decimal / numericNUMBER(p,s)精度縮放保留
float / realFLOAT / REAL
intNUMBER(10)
money / smallmoneyNUMBER(19,4) / NUMBER(10,4)固定 4 位小數
nchar / nvarchar / ntextNCHAR / NVARCHAR2 / NCLOBUnicode 類型
uniqueidentifierCHAR(38)含花括號與連字符
timestampRAW(8)Rowversion 二進制
tinyintNUMBER(3)
xmlNCLOB / XMLTYPEOracle 11g+ 支持 XMLTYPE

遷移關鍵注意點

  • MAX 類型(varchar(max)、nvarchar(max)、varbinary(max))→ Oracle CLOB/NCLOB/BLOB,無長度限制
  • 日期時間:SQL Server datetime 精度 3.33ms,Oracle DATE 精度 1s,TIMESTAMP 精度納秒;遷移高精度時間需用 TIMESTAMP(3)
  • 標識列:SQL Server IDENTITY → Oracle Sequence + Trigger 或 12c+ GENERATED AS IDENTITY
  • 唯一標識符:uniqueidentifier → RAW(16) 存儲更緊湊,或 CHAR(36) 可讀
  • 位數據:bit → NUMBER(1) 或 CHAR(1) ('Y'/'N')
  • 大對象:text/ntext/image 已棄用,新開發用 varchar(max)/nvarchar(max)/varbinary(max),Oracle 對應 CLOB/NCLOB/BLOB

實用查詢:生成建表腳本映射

SELECT 
  s.name AS sql_type,
  o.name AS oracle_type,
  m.precision, m.scale, m.nullable
FROM msdb.dbo.sysdatatypemappings m
JOIN sys.systypes s ON m.src_type = s.xusertype
JOIN sys.systypes o ON m.dest_type = o.xusertype
WHERE m.mapping_id IN (SELECT mapping_id FROM msdb.dbo.MSdatatype_mappings WHERE dest_dbms = 'Oracle');

工具輔助

  • SQL Server Migration Assistant for Oracle (SSMA):微軟官方免費工具,自動評估、轉換、遷移,強烈推薦
  • Oracle SQL Developer:Oracle 官方工具,含「遷移工作台」反向支持

最佳實踐

  1. 跑 SSMA 評估報告,收集無法自動轉換的類型/代碼
  2. 對照 sysdatatypemappings 手動確認核心表映射
  3. 大對象字段單獨測試導入性能與完整性
  4. 標識列改用 Sequence,重寫依賴 @@IDENTITY/SCOPE_IDENTITY() 的邏輯
  5. 測試環境全量演練,驗證數據精度、截斷、編碼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved