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

Oracle 轉 SQL Server 遷移:DUAL 表、字串連接與 SELECT 列選擇差異

     編輯:Oracle 資料庫基礎

前言

延續遷移系列,本文聚焦 **SELECT 列選擇語法**、**DUAL 表** 及 **字串連接運算子** 三大語法層面差異,這是改寫查詢時最先碰到的阻礙。

1. DUAL 表:Oracle 必備、SQL Server 不存在

Oracle 要求 SELECT ... FROM table 必須有 FROM 子句,故內建單列單行 DUAL 表供純量運算:


-- Oracle
SELECT SYSDATE FROM DUAL;
SELECT 'Hello' FROM DUAL;

-- SQL Server (直接 SELECT 純量運算式)
SELECT GETDATE();
SELECT 'Hello';

遷移時**直接移除 FROM DUAL** 即可。

2. 字串連接運算子

OracleSQL Server備註
||+SQL Server + 同時為數值相加與字串連接,隱性轉換優先數值,需注意 'A' + 1 報錯
CONCAT(str1, str2)CONCAT(str1, str2) (2012+)CONCAT 自動處理 NULL 轉空字串,建議統一使用

3. SELECT 列選擇與別名

  • 兩者皆支援 col AS alias、col alias。
  • Oracle 允許 SELECT col1, col2 FROM (subquery) 子查詢不強制別名;SQL Server **衍生表必須有別名** SELECT col1 FROM (subquery) AS t。
  • SELECT * 習慣同上,但生產環境建議**明確列出欄位**,避免結構變更導致應用報錯。

4. 額外常見語法差異速查

項目OracleSQL Server
分頁ROWNUM 子查詢 / OFFSET FETCH (12c+)OFFSET n ROWS FETCH NEXT m ROWS ONLY (2012+)
MERGE (UPSERT)MERGE INTO ... USING ... ON ...語法大同小異,注意 WHEN NOT MATCHED BY SOURCE
序列/自增CREATE SEQUENCE / NEXTVALIDENTITY(1,1) / SEQUENCE (2012+)
暫存表GLOBAL TEMPORARY TABLE#temp (Session) / ##temp (Global) / Table Variable

遷移建議

  1. 使用自動化工具 (SSMA for Oracle、Ora2Pg) 進行首輪轉換。
  2. 重點人工審查:DUAL 移除、|| 改 +/CONCAT、日期運算、分頁、NULL 語義。
  3. 建立測試資料集,對比 Oracle 與 SQL Server 查詢結果集完全一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved