2017-06-07 69 views
0

在我的SSRS報告生成器中,我爲我的一個數據集(名稱是dsTagAttributes)設置了一個表達式集。查詢類型是文本。如何在SSRS中正確設置表達式Query.CommandText?

這是查詢表達式

="select m.TagName, ta.descriptor, t.[State] from MasterTags m inner join TagAttributesClassic ta on m.ID = ta.TagID inner join TagStates t on t.ID = m.StateID where m.PIServerID = @ServerID and t.[State] = @State and m.MetaData1 = @Station " & Parameters!AndOr.Value & "m.MetaData2 = @Device" 

enter image description here

上述查詢表達式具有在選擇語句級聯的參數。

參數@AndOr數據類型是文本,具有「或」的默認值,並且參數的可見性被設置爲隱藏(屏幕下方拍攝)。我已設置此參數,因爲它將用於在報告運行期間動態地將數據集結果從or更改爲and

enter image description here

但是當我運行報告,拋出一個異常說:
enter image description here

什麼能去錯在我的查詢命令文本?

任何幫助,非常感謝。

回答

0

您可以針對數據源運行Profiler查看查詢。

我假設問題在於每個varchar值(@State,@Station)之前和之後都會丟失「'」。

我不會用這種方式來使用OrAnd條件

您可以修改TSQL像

... 
    AND 
    (m.MetaData2 = @Device AND @OrAnd = 'AND') 
) 
    OR 
    (m.MetaData2 = @Device AND @OrAnd = 'OR') 

只要確保你把')''('正確,根據業務邏輯。

+0

你是對的。我錯過了使用單引號將'@ State','@ Station'和'@ Device'參數包裝起來。我以爲ssrs查詢生成器會自動處理它,因爲參數是文本類型。並且,謝謝你的建議。使用您的方法與OrAnd條件相比有什麼好處? – Juniuz

+0

這只是我的編碼風格。我經常注意到一個查詢計劃更好,它可以存儲在查詢緩存中,而無需編譯它,對我而言,這種方法具有更好的可讀性。然而,這不是什麼大問題,所以如果表現良好,你可以使用你的方法。 – Anton