IT技术网www.itjs.cn

当前位置:首页 > 数据库 > SQl Server > 避免Access和SQL Server的空值冲突

避免Access和SQL Server的空值冲突

发布时间:2015-11-29 00:00 来源:未知

在链接到一个SQL Server数据库的Access项目(即.adp文件)中,你平时经常使用的Access函数通常是不支持的。但大多数时候,都可换用SQL Server支持的一个Transact-SQL(T-SQL)函数。一个特例是Access的空值(Null)函数Nz和IsNull;它们的功能相似,但并不是Access和T-SQL都能支持它们。本文要讨论在什么时候以及如何使用这两个函数来处理空值。

空值的重要性

空值是完全合法的数据库录入项,它们能提供的信息可能超过你的想象。空值指明一个值是未知的,但这并不是说该值不可接受或者不存在。空值表明一个值尚未确定,而且除非确定了合适的值,否则该值将保持未知状态,也就是为一个空值。

开发者的职责是判断空值可能在什么时候出现,并针对性地处理那些值。一个方案是在数据输入时拒绝空值,从而完全回避它们。但这样一来,你的数据将完全禁止空值,所以该方案的缺点在于,在你创建一条记录时,所有数据都必须是已知的。遗憾的是,对于大多数人来说,这个方案都不现实。以医院急诊室的数据库系统为例,是不是因为数据录入员不知道一个病人的中间名,就拒绝为其创建一条记录呢?所以,对空值进行妥善处理可提供更灵活的方案,因为即使数据录入员当时不知道所有数据,也能成功地创建记录。

大多数Access用户和开发者都熟悉Nz函数,它在遇到空值时返回除空值之外的其他值。该函数的形式如下,其中variant代表Variant数据类型,而valueifnull是一个可选参数,它负责在variant为空值时提供真正的返回值。

Nz(variant[, valueifnull])

B所示,两个Nz函数都返回字符串值,而不是空值,但具体的字符串是不同的。第一个表达式返回字符串"N/A"来取代空值:

WithOptional: Nz([Region],"N/A")

WithoutOptional: Nz([Region])

RegionString: IIf([Region]="","N/A",[Region])

WithoutOptionalString: IIf([WithoutOptional]="","N/A",[WithoutOptional])

IsNull(expression, valueifnull)

IsNull(Region, 'N/A')
结果与图B相同(在WithOptional字段中)。

图F

避免Access和SQL Server的空值冲突

在Access项目中用IsNull代替Nz
避免空值错误

Access和SQL Server用不同的函数来处理空值(分别是Nz和IsNull)。正确处理空值可防止数据库出现运行时错误和生成无效数据。不要回避空值,只需正确地处理它们。