IIF构造不解决正确的方式(SSRS)

时间:2017-01-25 09:55:47

标签: sql-server tsql reporting-services ssrs-2012

我在SSRS2012中的参数内遇到了这段代码的问题。

=IIF(InStr(Parameters!P1.Value,"@")=0,
"missing @", 
Left(Parameters!P1.Value(InStr(Parameters!P1.Value,"@")-1)))

我的目的是检查参数P1是否包含" @"如果它不打印"缺少@"否则我想从该参数中删除" @"之后的内容。 (" @" inculded)。

例如:
P1 = 123456 - >打印"缺少@"
P1 = 123 @ 56 - >打印123

问题是SSRS会丢失错误:"参数'长度'必须大于或等于零"当我插入一个没有" @"的值时。 (当我用&#34插入一个值时; @"它很顺利)

似乎IIF首先解析了2个表达式(而不是一个是真或假),之后它根据第一个条件的评估给出了正确的表达式。

寻求一些帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个奇怪的错误,这是一个解决方案

=replace(replace(IIF(InStr(Fields!P1.Value,"@")<> 0,
left(Fields!P1.Value,InStr(Fields!P1.Value,"@")),"missing"),"@",""),"missing","missing @")