2008-11-04 43 views

回答

4

有關於如何使用LIKE運算符帶參數的幾個選項。

OPTION 1

如果添加%至參數值,那麼你可以自定義過濾器LIKE將如何處理。例如,您的查詢可能是:

SELECT name 
FROM master.dbo.sysobjects 
WHERE name LIKE @ReportParameter1 

對於數據設置爲使用LIKE語句正確,那麼你可以使用像sysA的形式%的參數值。當我在2008年SSRS測試樣本報告使用此代碼,我返回了以下四個表:

sysallocunits 
sysaudacts 
sysasymkeys 
sysaltfiles 

OPTION 2

另一種方式來做到這一點,不需要用戶添加任何「% '符號是生成一個具有代碼並優於變量的變量。

DECLARE @DynamicSQL NVARCHAR(MAX) 

SET @DynamicSQL = 
'SELECT name, id, xtype 
FROM dbo.sysobjects 
WHERE name LIKE ''' + @ReportParameter1 + '%'' 
' 

EXEC (@DynamicSQL) 

這將使您更好地掌握如何使用LIKE語句。如果您不希望用戶注入任何其他運算符,那麼您總是可以添加代碼以除去非字母數字字符,然後將其合併到最終查詢中。

選項3

您可以創建一個控制此功能的存儲過程。我通常更喜歡使用存儲過程作爲SSRS的數據源,並且從不允許動態生成SQL,但這只是我的偏好。這有助於在執行依賴關係分析檢查時具有可發現性,並且還可以確保最佳查詢性能。

方案4

創建.NET代碼組件,其有助於動態地生成的SQL代碼。我認爲這是一種矯枉過正和糟糕的選擇,但它可以工作。

0

你有沒有嘗試過的事情:

select * from Products where Description like (@SearchedDescription + '%') (把單引號%符號在嗎?)

+0

嘗試這樣做,它不一樣,如果超過工作1值被選中。 – Dano 2008-11-17 20:34:53

0

Dano,您使用的是SSRS的哪個版本?如果是RS2000,多參數列表 不正式支持,但有一個解決辦法....

+0

以及該解決方法是什麼?如果選擇了多個值, – Dano 2009-05-14 23:20:03

0

放像這樣:

select * 
from tsStudent 
where studentName like @SName+'%' 
+0

不起作用。 – Dano 2009-11-06 20:33:50