2011-12-08 21 views
0

「WITH」クラスを使用する代わりに、これを再編成する方法はありますか?ここでSQL WITH句

コードです:

CREATE table #TEMP 
    (
      RowNum int identity, 
      ItemId int, 
      LevelId int, 
      Id int,   
      Depth int 
    ) 

    ;WITH CTEAlias 
    (ItemId, LevelId, Id, Existingdepth) as 
    (
     Select ItemId, LevelId, Id, 0 as ExistingDepth 
     From tblNavItems 
     Where NavLevelId In 
     (Select NavLevelId 
      From tblNavLevels 
      Where SoltnId = @FromSoltnID 
      And NavTypeId = @NavTypeId1) 
     And ParentId = -1 
     Union All 
     Select tni.ItemId, tni.LevelId, tni.Id, ExistingDepth+1 
     From tblNavItems as tni 
      Join CTEAlias as ca 
       On tni.Id = ca.ItemId 
     Where tni.LevelId In 
      (Select NavLevelId 
      From tblNavLevels 
      Where SoltnId = @FromSoltnID 
       And NavTypeId = @NavTypeId1) 
    ) 
    INSERT INTO #TEMP(ItemId, LevelId, Id,Depth) 
    Select * FROM CTEAlias Order BY Id 

私はそれで句NORエイリアス "と" したくありません。 2つのテーブルを使用してこれを書き換える方法が他にある場合は教えてください。

+1

なぜCTEを使用したくないですか? – JNK

+1

あなたの目標は何ですか?パフォーマンス?もっときれいなコード?他に何か? – ean5533

+0

@JNKおそらく、それらをサポートしていないSQL Serverのバージョンを使用しています。また、CTEに再帰的に参加しているので、サブクエリを使用することはできません。おそらく、代わりに一時テーブルに頼る必要があります。 – Yuck

答えて

1

一時テーブルにデータを選択する目的がある場合は、「WITH」なしで以下のように行うことができます。

CREATE table #TEMP ( dt1 datetime, id1 int) 
INSERT INTO #TEMP(dt1, id1) 
SELECT * FROM (
      Select ab, bc 
      From UY420 
      where bc=100000 
     ) a