我有这个 Oracle 代码结构,我正在尝试转换为 SQL Server 2008 (注意:我在方括号“[]”中使用了通用名称、封闭的列名和表名,并进行了一些格式化以使代码更多可读):
SELECT [col#1], [col#2], [col#3], ..., [col#n], [LEVEL]
FROM (SELECT [col#1], [col#2], [col#3], ..., [col#n]
FROM [TABLE_1]
WHERE ... )
CONNECT BY PRIOR [col#1] = [col#2]
START WITH [col#2] IS NULL
ORDER SIBLINGS BY [col#3]
上述代码的 SQL Server 等效模板是什么?
具体来说,我正在努力使用LEVEL和 'ORDER SIBLINGS BY' Oracle 构造。
注意: 上面的“代码”是一组 Oracle 程序的最终输出。基本上,“WHERE”子句是动态构建的,并根据传递的各种参数而变化。以“CONNECT BY PRIOR”开头的代码块是硬编码的。
以供参考:
SQL SERVER 文章中 ORACLE 的 CONNECT BY PRIOR 模拟接近了,但它没有解释如何处理 'LEVEL' 和 'ORDER SIBLINGS' 构造。......我的心变得扭曲了!
SELECT name
FROM emp
START WITH name = 'Joan'
CONNECT BY PRIOR empid = mgrid
相当于:
WITH n(empid, name) AS
(SELECT empid, name
FROM emp
WHERE name = 'Joan'
UNION ALL
SELECT nplus1.empid, nplus1.name
FROM emp as nplus1, n
WHERE n.empid = nplus1.mgrid)
SELECT name FROM n
如果我有一个初始模板可供使用,它将大大有助于我构建 SQL Server 存储过程以构建正确的 T-SQL 语句。
援助将不胜感激。