Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 检查多值参数的索引值_Sql Server_Reporting Services - Fatal编程技术网

Sql server 检查多值参数的索引值

Sql server 检查多值参数的索引值,sql-server,reporting-services,Sql Server,Reporting Services,我有一个多值参数,如何在iif条件下检查idex的值是否为null 现在,我使用这个表达式 IIF(IsNothing(参数!FR.Value(0)),“”和“Test”) 我的参数是隐藏的,有些东西它有4个值,有些时间小于4 当我检查索引3的值是否为(3)时,该索引中没有值。我显示出错误。如何检查参数的索引值。第一个问题是索引3中没有对象,而不是对象的值为Nothing,因此,尝试访问不存在的对象的值属性时会出错 第二个问题是,IIF是一个函数,而不是一个语言构造,因此在调用函数之前,不管布尔

我有一个多值参数,如何在iif条件下检查idex的值是否为null 现在,我使用这个表达式

IIF(IsNothing(参数!FR.Value(0)),“”和“Test”)

我的参数是隐藏的,有些东西它有4个值,有些时间小于4


当我检查索引3的值是否为(3)时,该索引中没有值。我显示出错误。如何检查参数的索引值。

第一个问题是索引3中没有对象,而不是对象的值为
Nothing
,因此,尝试访问不存在的对象的
属性时会出错

第二个问题是,
IIF
是一个函数,而不是一个语言构造,因此在调用函数之前,不管布尔条件的值是多少,都会计算所有参数。如果
IIF
函数不存在,我无法尝试访问
Value(3)
属性。你可以试试这样复杂的东西:

=IIF(Parameters!FR.Count >= 4, Parameters!FR.Value(IIF(Parameters!FR.Count >= 4, 3, 0)), "")
但是,当没有选择任何参数值时,这仍然会在您的脸上爆炸

最简单、最安全的方法是创建自定义代码函数,将多值参数和所需索引传递给该函数:

Function Get_FR_by_Index(ByVal parameter As Parameter, ByVal index As Integer) AS String
  Dim Result As String
  Result = ""
  If parameter.IsMultiValue Then
    If parameter.Count >= index+1 Then
      Result = CStr(parameter.Value(index))
    End If 
  End If 

  Return Result
End Function
然后使用此功能访问结果:

=Code.Get_FR_by_Index(Parameters!FR, 3)

请记住,索引是以零为基础的,因此第一个
值是索引0。

嗨,克里斯,谢谢你的回答。我想问一下我在ssrs报告中在哪里编写此函数。在Visual Studio中,使用
报告
菜单并选择
报告属性…
。在该对话框中,选择
code
窗口并将代码粘贴到上面。然后,您将能够访问表达式中的代码,如所述。我认为这也有一些用处: