繁体   English   中英

从Oracle迁移到SQL Server

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM