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