[英]Migrate from Oracle to SQL Server
我用Oracle編寫了以下查詢
delete from EQUI_HIERARCHY;
select max(level) into v_max_depth
from EQUIP_D
connect by prior EQUIP_NO=PARENT_EQUIP_NO
start with PARENT_EQUIP_NO is null;
如何將其轉換為SQL Server?
例如,由IBM DB2和SQL Server實施的實現遞歸查詢的SQL
標准方法是WITH子句。 請參閱本文,了解一個將CONNECT BY轉換為WITH(技術上是遞歸CTE)的示例-該示例適用於DB2,但我相信它也可以在SQL Server上使用。
在SQL Server
,IBM DB2或PostgreSQL 8.4中(以及在SQL標准中,這是值得的;-),完美等效的解決方案是遞歸查詢(更復雜的語法,但實際上,甚至更大的功能和靈活性) ):
WITH n(v_max_depth ) AS
(SELECT max(level)
FROM EQUIP_D
WHERE PARENT_EQUIP_NO IS NULL
UNION ALL
SELECT max(level)
FROM EQUIP_D as nplus1, n
WHERE n.EQUIP_NO= nplus1.PARENT_EQUIP_NO)
SELECT max(v_max_depth) FROM n
Oracle的START WITH
子句變成第一嵌套SELECT
,遞歸的基座的情況下,要UNIONed
與作為只是另一種遞歸部分SELECT
。
當然, MSDN上記錄了SQL Server特定的WITH風格,它還提供了使用此關鍵字的准則和限制以及幾個示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.