|
图D
遇到空值时,用Nz返回值而不是错误,下一个表达式也引用了Region值,只是通过Nz函数的结果来间接地引用:
WithoutOptionalString: IIf([WithoutOptional]="","N/A",[WithoutOptional])
这样一来,任何空值都可用一个更确切的值来表示,并在后续任何表达式中进行求值。如图D所示,表达式在处理空白Region字段时没什么问题。只有“未预计到”或者“未知”的空值才会导致问题。
Nz在项目中无法工作
有人以为Access项目也支持Nz函数,但实情并非如此。记住,项目中的表是真正的SQL Server表。要证明这一点非常简单,只需使用Access配套提供的示范项目NorthwindCS.adp。以Employees表的一个简单视图为基础,并像前面在Microsoft数据库(.mdb)文件中那样使用Nz函数,如图E所示。试图运行该查询时,Access会返回一个错误。
图E Access项目不支持Nz函数
在Access项目中使用Nz
在项目中不能使用Nz,而应换用Transact SQL的IsNull函数。该函数的作用与Nz相似,它的形式如下:
IsNull(expression, valueifnull)
两个参数都是必需的,IsNull结果值的类型由expression决定。如果valueifnull的列数据类型与expression的数据类型冲突,SQL Server会在你试图输入表达式时返回一个错误。例如,假如expression基于一个数值列,而valueifnull是一个字符串,两个参数就会产生冲突。由于SQL Server无法解决冲突,所以会拒绝表达式。
为了解决上例(图E)的问题,可将Nz替换成IsNull表达式,如图F所示:
IsNull(Region, 'N/A')
结果与图B相同(在WithOptional字段中)。
图F 在Access项目中用IsNull代替Nz
避免空值错误
Access和SQL Server用不同的函数来处理空值(分别是Nz和IsNull)。正确处理空值可防止数据库出现运行时错误和生成无效数据。不要回避空值,只需正确地处理它们。
(出处:清风网络学院)
上一篇:通过Oracle平台依赖性进行系统优化
下一篇:用SQL服务器内置的查询分析器寻找错误
|