文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程MSSQL用CHECK约束为SQL Server执行域完整性
精品推荐
特别推荐
·SQL Server企业管理器和查询分析器简介
·常用SQL语句词典
·结束SQL注入隐患3招
·掌握SQL Server数据库的实用技巧
·SQL的简单查询
·快速解决SQL Server“安全疑难”相关问题
·SQL Server 2005:你应知道的13件事
·实例解析:减少SQL日志大小的三个好方法
·使用SQL2000将现有代码作为Web服务提供
·sql server 2000数据库置疑的解决方法
·SQL Server安全问题全攻略之口令
·XP上不能安装MicrosoftSQLSERVER2000吗
·解析Microsoft Sql Server中的like语句
·推荐;适合SQL初学者学习的SQL FAQ集锦
·SQL Server 2005 中的分区表和索引
·查询及删除重复记录的方法大全
·详细介绍优化SQL Server 2000的设置
·关于SQL SERVER 日志满的处理方法
·使用SQL Server 2000索引视图提高性能
·SQL server 2005安装问题汇总
热点TOP10
·SQL server 2005安装问题汇总
·常用SQL语句词典
·Sql server优化50法
·SQL2000 数据库安装说明
·SQL Server 2005 中的分区表和索引
·SQL Server 练习题
·巴塞尔新资本协议概述
·用SQL批量插入数据
·提高查询速度:SQL Server数据库优化方案
·SQL SERVER中的union,cube,rollup和cumpute运算符
·查询及删除重复记录的方法大全
·把SQL SERVER里表里的数据导出成为insert into 脚本
·解决用sa登录sql 2005失败的问题
·在SQL Server 2000里设置和使用数据库复制
·sql server日期时间函数
·Sql数据库MDF数据文件数据库恢复
·sql 经典语句
·解决方案 用户 sa 登录失败
·SQL Server 2005免费版本下载排行居首
·安装Ms SQL Server 2005 开发版时出现性能计数器要求安装错误的解决办法

用CHECK约束为SQL Server执行域完整性

日期:2007年7月8日 作者: 查看:[大字体 中字体 小字体]


你可能认为简单的数据错误并不特别重要,但即使一个小错误也可能造成许多破坏。例如,一个邮政编码错误似乎不是太严重——直到一位新客户的订单无法到达。

或者想象一下,如果你的最优秀的销售员收到的佣金支票只有预期的一半,他所表现出的诧异程度。无疑,错误的数据可能造成严重的后果。

约束任何域,或栏可以接受的数据,开发者帮助保证应用程序保存了适当的数据。执行域完整性仅表示某一栏只接受应用程序的业务规则所规定的有效数据。

执行数据完整性的第一个步骤是设定栏的数据类型,但你的工作并不仅限于此。你还可以使用约束决定栏内所允许的实际值。约束指定义SQL Server如何执行数据完整性的规则。

你可能已经熟悉它们——你可以对一个栏应用PRIMARY KEY、NOT NULL、UNIQUE、FROEIGH KEY和CHECK这些约束。在本文中,我们将使用CHECK约束来执行业务规则,保护数据完整性。

应用一个简单的CHECK约束

定义一个栏的数据类型是执行域完整性的第一步。例如,一个数字栏不能接受alpha字符,一个比特栏只能接受0和1这两个值,等等。设定正确的数据类型可以发现一些数据输入错误,但一般来说,它无法执行给数据施加更多限制的业务规则。

CHECK约束在设定栏数据类型之上更进了一步。它们使用一个决定数据是否有效的布尔表达式限制一个栏可以接受的实际值。例如,你可以使用CHECK约束保证佣金比例总在5%到8%之间:

commission >= .05 AND commission <= .08

如果你输入0.06这个值,CHECK表达式将返回TRUE(真)并接受这个值。否则,表达式将返回FALSE(假)并拒绝0.01这个值。

用CHECK表达式求值时,出现NULL值的情况无法预料,且CHECK也不会明确拒绝NULL值。SQL Server具有足够的灵活性,允许在同一个栏中使用几个约束。(如果你试图建立一个与现有的约束或属性相冲突的约束,SQL Server将显示错误信息。)

为说明如何使用CHECK约束限制数据,我们建立一个限制输入仅为数字的约束,即使这个栏的数据类型为字符(文本)数据类型。这种情况在保存邮政编码时经常遇到。一个字符栏接受alpha字符,但邮政编码中只包含数字。使用Management Studio和SQL Server 2005 Express Edition,我手动建立一个只允许邮政编码栏接受五个数字的约束。

我们在例子中使用的表包含两个nchar栏——ZIPCode和City栏。你可以使用任何SQL Server表,只要其中包含一个邮政编码栏即可。

按照我们的例子,运行下列语句建立表:
CREATE TABLE ZIPCodesZIPCodenchar(5), City nchar(30)
在Management Studio的Object Explorer中,打开上面的表。
右击Constraints(约束)并选择New Constraint(新约束)。
在CHECK Constraints对话框的Expression(表达式)框中输入以下约束表达式,如图A所示(仅显示一部分)。
ZIPCode like '[0-9] [0-9] [0-9] [0-9] [0-9]'
将约束命名为CK_ZIPCodes_ZIPCoce。
输入一段简短的说明,如“限定邮政编码为五位数字”。
点击Add(添加)然后Close(关闭)。
在Standard(标准)菜单上点击Save(保存)。

CHECK约束使用一个表达式决定用户输入是否有效

你可以避开手动过程,执行一个下列格式的SQL语句(只要表已经存在):

ALTER TABLE tablename ADD CONSTRAINT constraintname CHECK (expression)

如果是上例中的表,则执行以下语句:

ALTER TABLE dbo.ZIPCodes ADD CONSTRAINT CK_ZIPCodes_ZIPCode CHECK (ZIPCode like '[0-9] [0-9] [0-9] [0-9] [0-9]')

[0-9]部分将指定位置的字符限定为0-9之间的任何数字。由于表达式重复使用了五个[0-9],表示这个约束只允许五个数字。大括号([])是你指定一组字符所用到的通配符。(欲了解约束表达式的更多信息,请查看在线手册。)

添加CHECK约束后,点击New Query(新查询)并执行以下SQL语句增加一个无效的邮政编码:

INSERT ZIPCodes (ZIPCode, City)

VALUES ('555aa', 'Smallville')

图B显示得到的结果。值555aa中包含两个违反[0-9]约束的字符。因此,SQL Server拒绝这个输入。不使用CHECK约束,SQL Server将接受555aa这个值。

CHECK约束不会接受555aa,因为其中包含alpha字符

记住,上面例子中的约束并不能保证它接受的输入确实是一个有效的邮政编码。它只能保证接受的值仅包含数字。

(出处:清风网络学院


[1] 




上一篇:Oracle数据库中每月工作日计算代码分析

下一篇:MySQL ODBC进行MySQL和SQL Server转换

用CHECK约束为SQL Server执行域完整性 相关文章:
·SQL server 2005安装问题汇总
·Sql server优化50法
·C#源码读取excel数据到程序中-SQL SERVER-到dataset中
·SQL Server 2005 中的分区表和索引
·SQL Server 练习题
·把Windows Server 2003配置为NAT路由器
·提高查询速度:SQL Server数据库优化方案
·关闭Windows Server 2003关机事件跟踪程序
·SQL SERVER中的union,cube,rollup和cumpute运算符
·部署 Microsoft SQL Server 2005 群集
用CHECK约束为SQL Server执行域完整性 相关软件:
·SQL Server 2000 基础系列课程视频
·Windows 2003 Server 简体中文企业版(免激活)ISO
·执行力就是竞争力 RMVB 余世维最新演讲
·Microsoft SQL Server 2005 Enterprise Edition SP1简体中文企业版
·逐步精通数据库 sql server 视频教程
·简体中文 Windows 2000 Server 培训教程
·MS SQL Server 2000 四合一
·IMail Server v7.13 无限制破解版
·Microsoft.SQL.Server.2005.简体中文开发版
·Monitors Matter CheckScreenV1.2

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot