Oracle PL/SQL CONNECT BY PRIOR ... SQL Server 中的 START WITH 语句

Posted

技术标签:

【中文标题】Oracle PL/SQL CONNECT BY PRIOR ... SQL Server 中的 START WITH 语句【英文标题】:Oracle PL/SQL CONNECT BY PRIOR ... START WITH statement in SQL Server 【发布时间】:2018-01-24 05:17:47 【问题描述】:
    select distinct sel.empty_tu_loc_id, sel.loc_id from 
(
    SELECT CONNECT_BY_ROOT LOC_ID_PARENT AS empty_tu_loc_id, LN.LOC_ID AS loc_id
    FROM LN_LOC_LOC LN
    CONNECT BY PRIOR LOC_ID = LOC_ID_PARENT and link_type = 'PARENT'
    START WITH LOC_ID_PARENT IN (SELECT e.loc_id FROM empty_tu_loc e inner join grp g on g.loc_id= e.loc_id)
) sel
left outer join empty_tu_loc e1 on e1.loc_id=sel.loc_id
where e1.loc_id is null
union all 
SELECT distinct loc_id, loc_id FROM empty_tu_loc
);

我很困惑: 如何将此代码迁移到 ms sql-sever 2014?

【问题讨论】:

您的问题无疑已经在一般意义上的“sql server相当于oracle connect by prior”的一般意义上被问过 - 有一个谷歌,尝试一些事情,如果可以的话,用你尝试过的东西提出问题不要让它工作。这样一来,您的问题就不会被如此严厉地否决——通常 SO 用户会在很明显原始提问者已经做了一些努力时尝试提供帮助,而不仅仅是像有免费的代码编写服务一样倾倒在他们身上 【参考方案1】:

您可以尝试递归公用表表达式 (CTE)。 看看这里 https://social.msdn.microsoft.com/Forums/en-US/bdab27a0-c1f5-477f-99ed-77f73cf0ea56/how-do-i-replace-the-usage-of-connect-by-prior-in-sql-server-2008r2-?forum=transactsql

【讨论】:

作为旁注,当引用不是 Stack Overflow 的站点时,就像您在此处对 MSDN 所做的那样,我们应该尝试在此处包含来自该站点的相关数据.. 如果 MSDN 曾经关闭,那么这样下来这个答案仍然有效并且没有断开的链接。或者您可以链接到另一个堆栈溢出帖子,而无需将其内容复制到此处。 SO 上的先前等价物肯定会对此连接提出疑问

以上是关于Oracle PL/SQL CONNECT BY PRIOR ... SQL Server 中的 START WITH 语句的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL developer连接oracle出现“ORA-12154:TNS:could not resolve the connect identifier specified”问题的解决(代码

PL/SQL连接Oracle,提示ORA-12504:TNS监听程序在connect-data中未获得service-name

Oracle或PL/SQL自动断开连接解决参考

Oracle PL/SQL - 根据条件对不同列进行选择、分组、排序、where-clause 的最佳方法?

Oracle函数sys_connect_by_path 详解

使用pl/sql的导入表工具导入dmp文件时,导入报错:遇到ORACLE错误 12546,请问怎么解决阿