2012-06-04 165 views
0

我有3個變量,這些變量在@path不爲NULL時是有條件的,即 @serverName,@analysisDB,@cubeName。因此,我在上述SELECT聲明中使用了CASE聲明。同樣,對於@path不爲NULL,@cubename還需要LVL5.L5_CubeName(請參見REPLACE語句)的條件,但它在REPLACE語句和CASE塊內變得太複雜了。我怎樣寫,如果我想要做這樣的事情SQL Server 2008中REPLACE語句中的CASE語句?

CASE WHEN @path!='' THEN @cubeName ELSE LVL5.L5_CubeName in the REPLACE statement 
SELECT LVL5.L5_Id,   
     CASE WHEN @path!='' THEN @serverName ELSE LVL5.L5_ServerName END [AnalysisServer],   
     CASE WHEN @path!='' THEN @analysisDB ELSE LVL5.L5_AnalysisDatabase END [AnalysisDatabase],   
     REPLACE(REPLACE(REPLACE(LVL5.L5_MDXQuery,'@@Level1',ISNULL(@lvl1DataVal,'')),  
     '@@Level2',ISNULL(@lvl2DataVal,'')),'@@CubeName',ISNULL(@cubeName,'')) [MDXQuery],   
     LVL5.L5_ReplaceMDX [ReplaceMDX],  
     LVL5.L5_RefreshDate [RefreshDate],  
     LVL5.L5_ReportAttribute [ReportAttribute],  
     LVL5.L5_ReportTitle [ReportTitle]   
    FROM Report_SR_Level5 [LVL5]     
    WHERE L4_ID = @L4_ID ORDER BY LVL5.L5_DisplayOrder 
+0

請格式化你的問題要提出的是可讀容易。你可能會覺得這很容易,但我認爲讓別人明白你想要什麼是很困難的。如果你使用了一個簡單的例子而不是粘貼你複雜的代碼(例如你可能不是LVL5.L5_遍佈整個樣本) –

+0

是的,我知道但是我意外地點擊了帖子按鈕,現在它不會讓我這麼做20分鐘前 –

+0

不知道我是否正確理解了您的問題?當你運行這個查詢時發生了什麼? – Rahul

回答

0

事情是這樣的:

CASE WHEN @path is not null or @path != '' 
THEN REPLACE(REPLACE(REPLACE(LVL5.L5_MDXQuery,'@@Level1', 
ISNULL(@lvl1DataVal,'')),'@@Level2',ISNULL(@lvl2DataVal,'')),'@@CubeName', 
ISNULL(@cubeName,'')) [MDXQuery] 
ELSE Somethingelse END cubedata