我有一個關于從 SSRS 多值引數查詢 SQL 的問題。我的多值引數基本上是空的,并且取決于用戶輸入的值,所以默認情況下它是空的:
如果沒有為 SSRS 引數提供值,我嘗試進行 SQL 查詢以查詢所有資料,如果提供了引數,則僅查詢引數的資料。
我嘗試了這些,但到目前為止都沒有:
SerialNumber IN (IIF(@SNList='', SerialNumber, @SNList)SerialNumber IN (IIF(@SNList IS NULL, SerialNumber, @SNList)SerialNumber IN (@SNList)
#1的作業原理是,如果引數為空并且只為引數輸入一個值,但如果輸入超過 1 個值則回傳錯誤(好吧,因為當有超過 1 個值時,我們不能使用“=”)
#2如果沒有為引數輸入任何值,如果只為引數輸入一個值,則不會回傳任何內容,但如果我輸入的值超過 1 個,則回傳錯誤。
#3適用于多/單值引數
有沒有辦法檢查引數值的數量,還是有另一種方法可以使它起作用?
uj5u.com熱心網友回復:
多選引數不能為空,并且要應用多選引數,SSRS 將轉換您的查詢,如果您嘗試檢查 TSQL 中的變數,該查詢將中斷。
您可以做的是引入第二個 TSQL 引數,根據您是否應該應用主要引數來設定該引數。所以你的多選引數@p1 是一個默認值為“All”的字串,資料集查詢類似于
if @p1IsNull = 1
begin
select *
from Sales.SalesOrderHeader
end
else
begin
select *
from Sales.SalesOrderHeader
where SalesOrderId in (@p1)
end
并且@piIsNull 設定了一個運算式

形式的
=iif( Parameters!p1.Value(0) = "All", 1, 0)
根據引數值,SQL 查詢將如下所示:
exec sp_executesql N'if @p1IsNull = 1
begin
select *
from Sales.SalesOrderHeader
end
else
begin
select *
from Sales.SalesOrderHeader
where SalesOrderId in (N''43660'',N''43667'')
end',N'@p1IsNull int',@p1IsNull=0
或者像這樣
exec sp_executesql N'if @p1IsNull = 1
begin
select *
from Sales.SalesOrderHeader
end
else
begin
select *
from Sales.SalesOrderHeader
where SalesOrderId in (@p1)
end',N'@p1IsNull int,@p1 nvarchar(3)',@p1IsNull=1,@p1=N'All'
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/452572.html
上一篇:SQL臨時日期表生成
下一篇:洗掉字串和符號
