All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
PHP5.2.0中allow_url_include的应用和解释_php资料_编程技术
ASP.NET:写个偷全国公交数据库的程序_.net资料_编程技术
PHP学习宝典-第五章_[PHP教程]
初谈ADO.NET中利用DataAdapter进行数据操作_[Asp.Net教程]
取得文件扩展名方法_[PHP教程]_0
不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令_[SQL Server教程]
SQL存储过程入门级教程_[SQL Server教程]
学习PHP小结:PHP编程中常用的三则技巧_[PHP教程]
用PHP制作动态计数器_php资料_编程技术
Apache小技巧五则_php资料_编程技术
Reading number is top 10 pictures
小学生作文又现神作,你不得不佩服
A man's favorite things3--ZhouWeiTong
男人,就要活出棱角
So beauty, will let you spray blood10
人造器官和铁肺人
Absolutely shocked. National geographic 50 animal photographys1
西游四格漫画(二)
这年头,找个靠谱的妹子太难了
男人帮杂志里的惹火性感美女1
初吻给了谁?
Download software ranking
虚拟机汉化软件
打鸟视频
Ashlynn Video4
WebService在.NET中的实战应用教学视频 → 第4集
Tram sex maniac 2 (H) rar bag8
jdk1.5
Eclipse 4.2.2 For Win32
apache-tomcat-6.0.33
Rio big adventure
Unix video tutorial15
归海一刀 published in(发表于) 2014/2/3 6:48:34 Edit(编辑)
避免SQL Server和Access的空值冲突_[SQL Server教程]

避免SQL Server和Access的空值冲突_[SQL Server教程]

避免SQL Server和Access的空值冲突_[SQL Server教程]


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

空值的重要性

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

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

认识到空值无法避免之后,你的职责就是正确处理它们,确保它们不会导致错误。正确处理空值有两方面的好处:

可与用户共享有意义的信息。

可提前捕捉空值,避免空值在后续的表达式中返回错误。

Access 中的空值

Access提供大量工具来操纵空值:

Is Null——在条件表达式和SQL WHERE子句中使用Is Null。

IsNull——将IsNull用于Visual Basic for Applications(VBA)。

Nz——遇到空值时,用Nz返回除Null之外的其他值。

以上函数在本质上存在细微差异。Is Null和IsNull捕捉空值;而Nz函数处理空值。换言之,如果想返回的不是实际存储的空值,就使用Nz。例如,你可显示一个简单字符串(例如"N/A"),让用户知道数据对于当前记录来说“不可用”。另外,当空值在表达式中使用之前,你可以捕捉空值,因为空值经常会返回错误。

通过链接表或者Access项目来使用Access和SQL Server时,会产生一个问题,因为Access和SQL Server不是用相同的函数来判断空值。因此,你必须知道要使用什么函数,以及在什么时候使用。

在.mdb文件中使用Nz

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

Nz(variant[, valueifnull])

如省略valueifnull,Nz返回值0或一个零长度字符串(""),具体由variant的数据类型决定。

图A的查询展示了如何使用Nz及其结果。该查询基于Access示例数据库Northwind中的Employees表。




图A

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

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

通过返回一个实际的字符串或者值,可为用户提供比空值更多的信息。字符串"N/A"明确指出:当前记录没有合适的值。相反,如返回空值,那么一个空白的字段可能使不熟悉的用户产生误解。




图B

Nz返回一个实际的值,而不是容易使人产生误解的空值.第二个表达式返回零长度的字符串来取代空值:

WithoutOptional: Nz([Region])

虽然这样为用户提供的信息较少,但却有效防止了在后续的表达式中使用空值,从而避免数据库出错。图C显示的新表达式证明了这一点。




图C

表达式可能不能像预期的那样处理空值,两个表达式都直接或间接依赖于Region字段中的值。第一个表达式直接引用Region字段:

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

只看表达式,你可能认为结果记录集的每个字段中都应该出现一个字符串。图D展示了实际结果,它和你设想的不符,并不是每个字段都包含一个字符串。事实上,只有在字段包含零长度字符串("")的前提下,表达式才会返回字符串"N/A"。我们知道,这些看似空白的字段包含空值,而不是零长度的字符串。但是,错误是可以理解的,也是能避免的。




图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)。正确处理空值可防止数据库出现运行时错误和生成无效数据。不要回避空值,只需正确地处理它们。


来源:网页教学网







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.