确保所有的非空(Non-NULL)值都是唯一的
来源:互联网 发布:线性时间选择算法 编辑:程序博客网 时间:2024/06/07 17:00
问:我的SQL Server表的一列允许NULL值。我希望在其值为非NULL时,该列是唯一的。怎样才能以编程的方式实现这一行为?如果在该列上设置一个UNIQUE 约束,我只能包含一个值为NULL的记录。我正在使用触发器实现这一约束,您可以推荐一个更简单的方法以保证所有的非NULL值唯一吗?
答:SQL Server没有实现非NULL值唯一性的内建机制,因此您需要通过自定义的CHECK约束来实现这一机制。例如,以下一段编码实现了您所需要的功能:
USE tempdb
CREATE table t1 (c1 int NULL, c2 char(5) NULL)
CREATE trigger mytrigger on t1 for insert, update as
BEGIN
IF (select max(cnt) from (select count(i.c1)
as cnt from t1, inserted i where t1.c1=i.c1 group
by i.c1) x) > 1
ROLLBACK TRAN
END
在SQL Server 2000中,您还可以使用INSTEAD OF触发器来实现这一功能。有关INSTEAD OF触发器的详细信息,请参阅以下文章。如需访问这些文章,请访问SQL Server 杂志网站,在InstantDoc框中输入InstantDoc号,然后点击Go。相关文章如下:
Tricks with INSTEAD OF Triggers; InstantDoc number 15828
INSTEAD OF Triggers on Views; InstantDoc number 15791
INSTEAD OF Triggers; InstantDoc number 15524
—SQL Server MVPs<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 确保所有的非空(Non-NULL)值都是唯一的
- 约束:确保数据的完整性(主键,唯一,检查,默认,非空,外键)
- 第二章 第三节:数值的空和非空(NULL / NOT NULL)
- 判断一个字符串的所有字符是否都是唯一的(使用hash表方法)
- 空与非空 EMPTY_LOB和NULL的区别
- 字符串的所有组合(非空子集)
- Lua实现遍历表格,确保其中的值唯一
- 非空唯一索引与OGG抽取数据的关联
- 如何确保URL的唯一性
- UITableView中确保UITableViewCellAccessoryCheckmark的唯一性
- 空值 null 的含义
- Javascript 中的非空判断 undefined,null, NaN的区别
- Java中null不等于任何非空的对象
- null!="" 常用的字符串非空判断
- JS中的非空判断 undefined,null, NaN的区别
- 关于Mysql的SUM()值会返回NULL而非空结果集的解决方案
- oracle统计表的所有列的非空记录数据
- "未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。"的解决办法
- 使用视图控制用户对数据访问
- POSTFIX上的邮件日志分析工具(pflogsumm)安装与配置
- 重写的JavaScript压缩合并工具
- 用 Delphi 编写 VxD 设备驱动程序(转)
- 对display:inline;与float:left;的认识
- 确保所有的非空(Non-NULL)值都是唯一的
- 如何设置delphi/cbuilder/BDE/MSSQL
- 推荐几组漂亮的按纽CSS(名字自己定义)
- 打开UDP端口1434以浏览命名实例
- 一个可以自己布局的推箱子游戏 (附源码)
- 认识CSS中absolute与relative
- 将列更新从一个表传递到另一个表
- Delphi中的消息钩子函数和Windows子类处理 入门篇
- 透明的(transparence)CSS菜单