当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 确保所有的非空(Non-NULL)值都是唯一的

MSSQL
实现按部门月卡余额总额分组统计的SQL查询代码
浅议Oracle中的进制转换
sqlserver MSDTC的设置要点
小议主子表INT自增主键插入记录的方法
使用SQLSERVER的扩展存储过程实现远程备份与恢复
SQL安装问题总结
使用XML封装数据库操作语句的实现
SQL Server与Excel数据互导
查询sql遇到deadlock问题的解决
解决sqlsever日志备份错误的方法
关于sql数据库维护失败的问题查找方法
跟日期有关的两条经典SQL语句
使用链接服务器执行远程数据库上的存储过程
select用存储过程返回的表
SQL SERVER与ACCESS、EXCEL的数据转换
榨干MS SQL Server 最后一滴血
SQL Server 2005: 利用新的ranking函数实现高效的数据分页操作
在SQL Server 中使用SQLDMO
SQL Server补丁版本的检查和安装过程中常见问题
SQL高手篇:精妙SQL语句介绍

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 57 ::
收藏到网摘: n/a

 

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