从 Oracle 迁移到 SQL 服务器

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服务器?

SQL 实现递归查询的标准方法,例如实现的IBM DB2 和 SQL Server, is the WITH clause. See this article 提供了一个将 CONNECT BY 转换为 WITH(技术上是递归 CTE)的示例——该示例适用于 DB2,但我相信它也适用于 SQL 服务器。

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

SQL 服务器的特定风格的 WITH 当然记录在 MSDN 上,其中还提供了使用此关键字的指南和限制,以及几个示例。