SQL Server报表表达式因int值为NULL而失败



IIF给了我一些地狱。当我这样做的时候,一切都正常:

=IIF (IsNothing(First(Fields!Temperature.Value, "ReportInfoDataSet")),"NULL","GOOD")

但是,当我想实际使用该值时,NULL值会出现#Error,从我所读到的内容来看,这是因为IIF会同时评估所有内容,所以对于"GOOD"条件,.ToString((参数会失败,即使它没有使用。

当我有一个空值时,这会给出#错误:

=IIF(
IsNothing(First(Fields!Temperature.Value, "ReportInfoDataSet")), 
"N/A",
First(Fields!Temperature.Value, "ReportInfoDataSet").ToString()
)

那么,我该如何处理IIF想要评估所有术语的事实呢?TechNet的一篇文章显示,嵌套另一个IIF语句作为"GOOD"条件有助于NULL值,但我仍然会得到错误(例如这样做(:

=IIF(
IsNothing(First(Fields!Temperature.Value, "ReportInfoDataSet")),
"N/A", 
IIF(
IsNothing(First(Fields!Temperature.Value, "ReportInfoDataSet")),
"N/A",
First(Fields!Temperature.Value,"ReportInfoDataSet").ToString() & ChrW("&H00B0") & "F"
)
)

这篇文章指出了这个潜在的解决方案,但我似乎仍然缺少一些东西,或者某些东西发生了变化,使这个解决方案无效。

还有一点信息:我在填充数据表后插入了一个断点,认为我只需截取表填充并修改,使NULL变为0或其他值,而且数据表似乎是强类型的,不允许为null的数据类型,所以温度列有一个例外:

'(ReportInfoRow((new System.Linq.SystemCore_EnumerableDebugView((test.Table).Rows)).Items[0]))
.Temperature' threw an exception of type 'System.Data.StrongTypingException'

任何见解都是有价值的。我在考虑是否只想向数据集添加一个扩展,并添加一个MyTemp参数来修复报告的值。

若要在上述缺少短路布尔求值的情况下不强制使用.ToString(),请将其替换为CSTR()

CSTR(First(Fields!Temperature.Value, "ReportInfoDataSet"))

最新更新