我有一个报告,需要在文本字段参数中接受数字范围和逗号分隔值。该参数用于“帐户类型”,他们希望能够输入“1,2,5-9”,并且将采用1,2,5,6,7,8,9的整数值。我知道如何使用单个值执行此操作但从不使用范围。
我将用于单个值的示例代码是:
SELECT
arcu.vwARCUAccount.AccountType
,arcu.vwARCUAccount.ACCOUNTNUMBER
FROM
arcu.vwARCUAccount
WHERE
arcu.vwARCUAccount.AccountType = @AccountType
任何信息都会非常有用。我的团队中的某个人已经估计了它,并说它可以在没有意识到他们想要一个范围的情况下完成,所以现在我被困住了。我打赌这里的每个人都在我的位置,所以我提前感谢大家。
答案 0 :(得分:1)
你想做几件事。
一个。设置数据类型为“整数”的参数,并确保选中“允许多个值”复选框。将它的值设置为'Ints'。现在打得好。
这实质上设置了一个数组可用列表,您可以为该类型的数据类型定义一个可以传递多个数据集的数据集。
B中。创建一个名为“values”的简单数据集,就像这样
declare @Ints table ( id int);
insert into @Ints values (1),(2),(5),(6),(7),(8),(9)
℃。在第一步中返回您的变量并打开它的属性。在侧窗格中选择“可用值”。选择单选按钮“从查询中获取值”。将您的数据集列为“值”,将您的值和标签列为“id”。
您现在已将参数数组绑定到指定的值。然而,用户不必只选择其中一个或全部,而是选择其中一个或多个。
d。您需要设置主数据集(我假设您在来之前已经做过)。为了我的例子,我将做一个简单的。我创建了一个名为person的数据集:
declare @Table Table ( personID int identity, person varchar(8));
insert into @Table values ('Brett'),('Brett'),('Brett'),('John'),('John'),('Peter');
Select *
from @Table
where PersonID in (@Ints)
重要的部分是谓词显示:
'其中PersonID在(@Ints)'
这告诉数据集它依赖于用户来选择此数组参数中的值。
答案 1 :(得分:0)
我对tsql并不完全熟练但是使用reg表达式呢?
如:
arcu.vwARCUAccount.AccountType like '[' + replace(@AccountType, ',','') + ']'
答案 2 :(得分:0)
查看 use of Multivalue parameter link
它可能对你有帮助。
答案 3 :(得分:0)
这可行。作为一个骄傲的刷子尝试:
从tsql中删除帐户类型的过滤器。
创建一个输入数字的vb函数,这是帐户类型,并测试它是否在用户提供的参数字符串中并输出1或0. Vb Functions
Function test(byval myin as integer, byval mylimits as string) as integer
'results as 1 or 0
dim mysplit as string()= Split(mylimits, ",")
dim mysplit2 as string(1)
'look through all separated by a ","
For Each s As String In mysplit
'does there exists a range, i.e. "-"?
if s like "%-%" then
mysplit2 = split(s, "-")
'is the value between this range?
if myin >= mysplit(0) andalso myin <= mysplit(1) then
return 1
end if
'is the value equal to the number?
elseif s = myin then
return 1
end if
Next s
return 0
End
3。使用vb函数在数据集上创建过滤器,并将帐户类型作为输入等于1。
=code.test(Fields!AccountType.Value, Paramaters!MyPar.Value)