[英]mulit value and stored procedures
我查看了有關報表服務中多值選擇的其他問題,但沒有一個問題解決了我的問題。
我的問題是這個。 我有一個對參數-@Type進行查詢的報告。
按類型從類型表順序中選擇不同的(類型)
報表參數設置完畢,報表在選擇框中顯示所有返回的結果(當前為3)。
我的存儲過程具有以下子句:其中,鍵入(@Type)。 該報告僅返回選擇框中的第一個項目,而不是全部三個。
請協助。
謝謝!!!
我不確定多選列表框返回的格式或數據類型,但是如果是這樣的話:
X,Y,Z
您有兩個選擇(我更喜歡選擇1):
選項1
您可以在SQL Server 2005-使用數字表中使用數組和列表將其分開。 使用該代碼,您可以將字符串拆分為一個表,每個值都在其自己的行中。 然后,您可以將該表INNER JOIN到您的查詢中,並根據多個@Type值進行過濾。
選項2
在存儲過程中,您可以將查詢動態地構建為字符串。 然后,您可以執行(@YourString)並運行該查詢。 您的字符串如下所示:
SET @ QUERY ='選擇...從...位置...在('+ ISNULL(@Type,'')+')'
查看此鏈接Dynamic SQL的詛咒和祝福
我不認為可以執行IN(@type)語句。
IN必須以逗號分隔,我不相信您可以將@Type傳遞為“ 1,2,3”並使其起作用。
也許您可以將@Type變量解析到臨時表中,然后在臨時表上進行JOIN。 不過,這可能會有點慢。
我使用以下表變量函數將列表拆分為一個表,可以在IN'd中進行JOIN'd。
ALTER FUNCTION [dbo].[Split] ( @List nvarchar(4000), @SplitOn nvarchar(5) ) RETURNS @RtnValue table (
Id int identity(1,1), Value nvarchar(100) ) AS BEGIN WHILE (Charindex(@SplitOn,@List)>0) BEGIN Insert Into @RtnValue (value) Select Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1))) Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List)) END Insert Into @RtnValue (Value) Select Value = ltrim(rtrim(@List))
Return END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.