确保所有的非空(Non-NULL)值都是唯一的

问:我的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

时间: 2024-08-29 11:53:47

确保所有的非空(Non-NULL)值都是唯一的的相关文章

SQLserver查询数据类型为ntext是空或NULL值的方法_MsSql

复制代码 代码如下: --为空的值text ntext select * from lf_newsNg_utf where datalength(newsContentE)=0 or datalength(newsContentE) is null

SQLserver查询数据类型为ntext是空或NULL值的方法

复制代码 代码如下:--为空的值text ntext select * from lf_newsNg_utf where datalength(newsContentE)=0 or datalength(newsContentE) is null

用sql命令修改数据表中的一个字段为非空(not null)的语句_php技巧

ALTER TABLE table1 ALTER COLUMN [name] varchar(60) NULL; table1 表名 name 字段名 为什么加上[],因为name是sql关键字会冲突出现错误,这样以防万一. 如果name字段已经创建了索引,如果需要修改的话,必须先删除索引才能正确的进行.

aps net-为什么奇怪极了,我的断点g显示为null,为什么接下来的表明为非空?

问题描述 为什么奇怪极了,我的断点g显示为null,为什么接下来的表明为非空? MyPetShopDataContext db = new MyPetShopDataContext(); var f=from m in db.Category where m.Name==txt1.Text select m; var g=from d in db.Category where d.Descn==txt2.Text select d;//我在这断点调试了 g值为null,为什么页面老是显示成功呐,

数据库-vb.net提示未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。

问题描述 vb.net提示未能启用约束.一行或多行中包含违反非空.唯一或外键约束的值. 图片说明图片说明图片说明图片说明 解决方案 就是这个字段是唯一的.或者不能为空的.或者指向的外键必须存在等等,但是你插入的数据不满足. 解决方案二: 实在找不出问题在哪里了,麻烦你给看看吧,我上传了4张截图 解决方案三: 看你2,3两个图后,你完全没有数据验证 name,remark,mon没判断是否为空,date不是日期格式,mon是否可以转换成int,还有字符串长度判断

Oracle数据库中对null值的排序及mull与空字符串的区别_oracle

order by排序之null值处理方法在对业务数据排序时候,发现有些字段的记录是null值,这时排序便出现了有违我们使用习惯的数据大小顺序问题.在Oracle中规定,在Order by排序时缺省认为null是最大值,所以如果是ASC升序则被排在最后,而DESC降序则排在最前.所以,为何分析数据的直观性方便性,我们需要对null的记录值进行相应处理. 这是四种oracle排序中NULL值处理的方法:1.使用nvl函数语法:Nvl(expr1, expr2)     若EXPR1是NULL,則返回

未能启用约束。一行或多行中包含违反非空,唯一或外键约束值

问题描述 在数据集里面预览没有问题,但是绑到gridview上就出现未能启用约束.一行或多行中包含违反非空,唯一或外键约束值[code=csharp]createorreplaceprocedurePRO_MTGL_DBSW(P_usernameinvarchar2,P_dwidinvarchar2,P_ressetoutsys_refcursor)iscursorcur_roleidisselectroleidfromta_s_usersroleswhereusername=p_usernam

php中Null 空 与0值区别分析

例子.  代码如下 复制代码 <?php $test=0; if($test==''){  echo '<br />在php中,0即为空'; //被输出 } if($test===''){  echo '<br />在php中,0即为空'; //不被输出 } if($test==NULL){  echo '<br />在php中,0即为空'; //被输出 } if($test===NULL){  echo '<br />在php中,0即为空'; //不

MySQL中的NULL值相关问题

对于SQL的新手,NULL值的概念常常会造成混淆,他们常认为NULL是与空字符串''相同的事.情况并非 如此.例如,下述语句是完全不同的: mysql> INSERT INTO my_table (phone) VALUES (NULL); mysql> INSERT INTO my_table (phone) VALUES (''); 这两条语句均会将值插入phone(电话)列,但第1条语句插入的是NULL值,第2条语句插入的是空字符串 .第1种情况的含义可被解释为"电话号码未知&