我正在使用 SQL Server 2005。
我有一个必须包含唯一值或 NULL 值的字段。我认为我应该用以下任一方式强制执行此操作CHECK CONSTRAINT
or a TRIGGER for INSERT, UPDATE
.
与触发器相比,在这里使用约束是否有优势(反之亦然)?这样的约束/触发器是什么样的?
或者还有其他我没有考虑过的更合适的选择?
我创建一个带有索引的视图,该索引通过 where 子句忽略空值...即如果您将空值插入表中,视图不会关心,但如果您插入非空值,视图将强制执行约束。
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,您需要“设置 ARITHABORT 为 ON" 就在对表执行任何插入、更新或删除之前。很确定在 mssql 2005 及更高版本上不需要这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)