報表引數多個值的接收及儲存過程解析

2021-05-27 08:44:51 字數 3887 閱讀 5094

若要為引數設定多值屬性,則在「報表引數」對話方塊上選擇「多值」選項。可以將任何引數型別設定為多值(除布林值之外)。

您可以為要建立的任何報表引數定義多值引數。不過,如果要將多個引數值傳回查詢,則必須滿足下列要求:

編寫引用多值引數的表示式

在表示式中引用引數時,使用全域性集合引數。在表示式中使用多值引數時,既需要了解如何處理單個值也需要了解如何處理整組值。下表為設定「多值」選項的引數提供了有關引數屬性的示例和說明。

示例說明

parameters!

.value

該引數的一組變數資料值。

parameters!

.label

一組用作該引數標籤的字串。

parameters!

.ismultivalue

表明是否已選擇引數「多值」選項的布林值屬性。

parameters!

.count

陣列中值的數量。

parameters!

.value(0)

多值陣列中的第乙個值。

parameters!

.label(0)

多值陣列中的第乙個標籤。

parameters!

.value(parameters!

.count-1)

多值陣列中最後乙個值。

parameters!

.label(parameters!

.count-1)

多值陣列中最後乙個標籤。

=join(parameters!

.value,", ")

該表示式將 string 型別多值引數陣列中的所有值連線為乙個字串。

=split("value1, value2, value3",",")

接收乙個字串並建立一組物件,這些物件可以被傳遞到需要多值引數的子報表和鑽取報表。

把多值引數所有 值連線為乙個字串的形式進行傳值

設定引數值為:

=join(parameters!

.value,", ")

一、場景說明:

1、報表需要對同乙個引數同時輸入多個值進行查詢

2、報表引數:字串格式;引數的每個值之間以特定的符號隔開,以下以逗號(,)為示例進行

二、儲存過程呼叫實現

1、必備函式

go create function get_strarraylength ( @str varchar(1024), --要分割的字串

@split varchar(10) --分隔符號 )

returns int

as begin

declare @location int

declare @start int

declare @length int

set @str=ltrim(rtrim(@str))

set @location=charindex(@split,@str)

set @length=1 while @location<>0

begin

set @start=@location+1

set @location=charindex(@split,@str,@start)

set @length=@length+1

end

return @length

end

--呼叫示例:

select dbo.get_strarraylength('6,5,9,3',',')--返回值:4

go create function get_strarraystrofindex ( @str varchar(1024), --要分割的字串

@split varchar(10), --分隔符號

@index int --取第幾個元素 )

returns varchar(1024)

as begin

declare @location int

declare @start int

declare @next int

declare @seed int

set @str=ltrim(rtrim(@str))

set @start=1

set @next=1

set @seed=len(@split)

set @location=charindex(@split,@str)

while @location<>0 and @index>@next

begin

set @start=@location+@seed

set @location=charindex(@split,@str,@start)

set @next=@next+1

end if @location =0

select @location =len(@str)+1 --這兒存在兩種情況:1、字串不存在分隔符號 2、字串中存在分隔符號,跳出while迴圈後,@location為0,那預設為字串後邊有乙個分隔符號。

return substring(@str,@start,@location-@start) end  

--呼叫示例:

select dbo.get_strarraystrofindex('8,9,4',',',2) --返回值:9

go create function f_splitstr --alter function f_splitstr

( @sourcesql varchar(8000), @strseprate varchar(100) )

returns varchar(8000)

as begin

declare @temp as varchar(8000)=''

declare @ch as varchar(100)

set @sourcesql=@sourcesql+@strseprate

while(@sourcesql<>'')

begin

set @ch=left(@sourcesql,charindex(',',@sourcesql,1)-1)

set @temp = @temp + ''''+@ch+'''' + ','

set @sourcesql=stuff(@sourcesql,1,charindex(',',@sourcesql,1),'')

end

return substring(@temp,0,len(@temp))

end

------呼叫 -- select [dbo].[f_splitstr]('1,2,3,4',',') -- 結果:'1','2','3','4'

2、儲存過程裡呼叫函式的方法

呼叫函式

declare @sql varchar(5000) = 'select * from #t1 as a where 1=1 '

if(dbo.fn_isempty(@molotcode) = 0)

set @sql += ' and a.molotcode in( '+ [dbo].[f_splitstr](@molotcode,',') +')'

if(dbo.fn_isempty(@modocno) = 0)

set @sql += ' and a.modocno in ( '+ [dbo].[f_splitstr](@modocno,',') +')'

其中@molotcode和@modocno是儲存過程傳入的引數,格式為:1,2,3,4,5

通過函式f_splitstr解析之後將得到:   '1','2','3','4','5'  的格式

多個引數的儲存過程

今天寫了乙個通過多個引數查詢列表記錄的儲存過程,查詢和排序的時候涉及了多個表和字段,寫下來記錄一下.也給需要的同僚借鑑一下.正文如下 use dbname go object storedprocedure dbo getproductlistbymanyparams script date 07 ...

微軟企業庫 接收 儲存過程返回的多個值

db.addoutparameter dbcommand,num1 dbtype.int32,32 db.addoutparameter dbcommand,num2 dbtype.int32,50 db.executenonquery dbcommand int num1 int.parse db...

儲存過程 IN 多個引數解決

今天寫儲存過程的時候,遇到了傳入多個引數,不能用in匹配的問題。例如 傳入引數 b a b c pl sql語句 select from table where var in b 不能匹配,因為pl sql把b當做乙個完整的字串,select from table where var in a b ...