2011-12-08 102 views
0

是否有任何其他方式來重組這個,而不是使用「WITH」 clasue?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 

我不想「與」條款中,也沒有別名。 請讓我知道是否有任何其他方式來重寫這可能使用兩個表?

+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