2011-05-24 79 views
6

這個問題已經被問過 -SQL服務器 - 用戶CTE子查詢

How we can use CTE in subquery in sql server?

唯一的答案建議「只是定義在頂部和訪問它的子查詢你的CTE?」

這工作,但我真的很想能夠在下列情況下使用CTE -

  1. 在SELECT

  2. 在一個子查詢作爲派生表FROM子句的選擇

這兩個工作在PostgreSQL中。使用Sql Server 2005,我得到「關鍵字附近的語法錯誤」,並帶有「」。

我希望它的原因是我的大部分查詢都是動態構建的,我希望能夠定義一個CTE,將其保存在某處,然後將其放入更復雜的查詢中。

如果Sql Server根本不支持這種用法,我將不得不接受它,但我沒有閱讀任何說明它不被允許的東西。

有誰知道是否有可能得到這個工作?

回答

3

在SQL Server中,CTE必須位於查詢的頂部。如果您動態構建查詢,除查詢外,還可以存儲CTE列表。在您將查詢發送到SQL Server,你可以用CTE的列表前綴查詢:

; with Cte1 as (...definition 1...), 
    Cte2 as (...definition 2...), 
    Cte3 as (...definition 3...), 
    ... 
...constructed query... 

這是假設你正在構建SQL的SQL Server之外。

你也可以考慮創建視圖。視圖可以包含CTE,它們可以用作子查詢或派生表。如果您不經常生成SQL,則視圖是一個不錯的選擇,只有在安裝過程中或作爲部署的一部分纔會說。

1

SQL Server不支持這個非常需要的功能。我也一直在尋找這方面的幫助。 與PostgreSQL相比,MS SQL Server不支持臨時視圖。上述解決方案也可能僅在所有CTE定義可以事先生成並且在每個子查詢中沒有衝突名稱的情況下才起作用 - 目的在於這些CTE定義對於每個級別可能是不同的的子查詢。

悲傷但真實!

Regards, Kapil