我正在使用SQL Server 2005.
我有一个必须包含唯一值或NULL值的字段.我想我应该用a CHECK CONSTRAINT
或a 强制执行TRIGGER for INSERT, UPDATE
.
在触发器上使用约束是否有优势(反之亦然)?这样的约束/触发器可能是什么样的?
或者是否有其他更合适的选择我没有考虑过?
我创建了一个带有索引的视图,该索引通过where子句忽略空值...即,如果在表中插入null,则视图不关心,但如果插入非空值,则视图将强制执行约束.
create view dbo.UniqueAssetTag with schemabinding as select asset_tag from dbo.equipment where asset_tag is not null GO create unique clustered index ix_UniqueAssetTag on UniqueAssetTag(asset_tag) GO
所以现在我的设备表有一个asset_tag列,允许多个空值但只有唯一的非空值.
注意:如果使用mssql 2000,则需要在对表执行任何插入,更新或删除之前" SET ARITHABORT ON ".很确定mssql 2005及以上版本不需要这样做.