我現在有一個多標準查詢,該過濾器基礎上的ID是一個子查詢NHibernate的多標準CTE子查詢
Subqueries.PropertyIn("Id", detachedCriteria)
子查詢中的結果是在多標準查詢中使用的所有查詢相同。
看起來有點難看的子查詢重複的SQL,在我目前的情況下15次。
單獨查詢的原因是每個人都有不同的連接,並且不希望進行一次大規模的笛卡爾連接。
如果我手寫的sql我會退出經重複子查詢到一個共同的表表達式
WITH XYZ AS
{
....
}
,然後將子查詢是其中id在XYZ在15個查詢。
這是一個特定於SQL Server的服務器,替代方案是臨時表或其他特定於數據庫的功能。
任何想法如何改善查詢,或者我堅持與子查詢被複制?
感謝您的信息,閱讀您的建議後發現此文章確認您的評論。 http://www.singingeels.com/Articles/Understanding_SQL_Complex_Queries.aspx「有一點需要注意的是CTE只能在查詢中使用一次,所以你不能在最上面聲明你的CTE,然後做多個查詢但是,您可以創建多個CTE,然後在一個查詢中一起使用它們,並且所有事情都有它的位置,所以如果您發現多次爲不同的報告/查詢構建相同的CTE,那麼您可能需要轉向而不是進入VIEW。「 – Ian 2010-11-15 09:08:05
在我的情況下,我無法像創建動態查詢那樣創建存儲過程。爲每個動態查詢創建一個視圖將會變得更慢,吞噬事務日誌(可以使用簡單的恢復模式放入另一個鏈接的數據庫)。無論如何,CTE不會幫助我。 – Ian 2010-11-15 09:15:11
@Ian:您*可以*使用存儲過程。只需傳遞你在NHibernate查詢中使用的所有輸入參數即可。如果它有很多參數或事物列表(例如,ID),則可以考慮將參數作爲XML傳遞。 – 2010-11-15 17:49:20