数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
不用企业管理器的情况下得知CHECK约束的属性设置

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

我们知道,在SQL SERVER企业管理器中,在“设计表”状态下,当查看该表的CHECK约束时,会看到CHECK约束有“创建中检查现存数据”、“对复制强制约束”、“对INSERT和UPDATE强制约束”三个复选框,那么如果不在企业管理器环境下,或者在应用程序中,我们如何得知某个CHECK约束的这三个选项是否选中呢?

我查看了相关系统表的帮助说明,但里面对好多字段的说明都为“保留”、“仅供内部使用”等,没有字段的作用说明。但我发现当改变三个选项的选中状态时,sysobjects中相应CHECK约束记录的status字段值发生改变,为了得知其中是否有规律可循,我做了如下测试并得出一些结论,拿出来共享。

“创建中检查现存数据”、“对复制强制约束”、“对INSERT和UPDATE强制约束”三项属性分别对应000的三位,0为不选,1为选中。

建立一个测试表,为其建立列级CHECK约束和表级CHECK约束,先令其为空表。
下面结果中,等号左边为三个属性的选中状态,右边为sysobjects表中约束记录的status字
段值:
对于列级约束:
000=3330
001=3074
010=2306
011=2050
100=3330(保存后仍未选中,不知为何)
101=3074
110=2306
111=2
发现除111外,其余首位为1均作为0看待。

对于表级约束:
000=3328
001=3072
010=2304
011=2048
100=3328
101=3072
110=2304
111=0
可发现与列级约束有同样的问题,同时,对于相同的二进制值,表级约束比列级约束少2。

但值得注意的是,以上测试是在表中无数据的情况下,故可能引起三位二进制数的最高位无意义。下面测试表中有数据的结果(在测试表中插入了符合各CHECK约束的数据):

对于列级约束:
000=3330
001=3074
010=2306
011=2050
100=3330
101=3074
110=2306
111=2

对于表级约束:
000=3328
001=3072
010=2304
011=2048
100=3328
101=3072
110=2304
111=0

可见结果完全相同。
猜测原因是“创建中检查现存数据”一项只在CHECK约束保存瞬间作用,保存后系统即将其取
消,故若查看已有的CHECK约束,该选项已无意义,故为不选中状态。

但在pubs库中,发现系统已有的一些CHECK约束的status初始值为6,不知何解?不过修改后与以上结果相符。




相关文章

相关软件