SQL Server 2008 に変換しようとしているこの Oracle コード構造があります(注:汎用名を使用し、列名とテーブル名を角かっこ '[]' で囲み、コードをよりわかりやすくするために書式設定を行いました読み取り可能) :
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 ステートメントを構築するのに大いに役立ちます。
助けていただければ幸いです。