我的SQL Server数据库中有一个配置表,该表只能有一行。为了帮助将来的开发人员理解这一点,我想防止添加多行数据。我选择为此使用触发器,如下所示...
ALTER TRIGGER OnlyOneConfigRow
ON [dbo].[Configuration]
INSTEAD OF INSERT
AS
BEGIN
DECLARE @HasZeroRows BIT;
SELECT @HasZeroRows = CASE
WHEN COUNT (Id) = 0 THEN 1
ELSE 0
END
FROM
[dbo].[Configuration];
IF EXISTS(SELECT [Id] FROM inserted) AND @HasZeroRows = 0
BEGIN
RAISERROR ('You should not add more than one row into the config table. ', 16, 1)
END
END
这不会引发错误,但不允许第一行进入。
还有一种更有效/更自我解释的方式来将可插入表中的行数限制为1吗?我是否缺少任何内置的SQL Server功能?
2
就像解释为什么您的原始方法不起作用的原因一样:您使用了代替代替触发器,这意味着您的代码将代替插入语句运行。因此,为了使插入发生,您必须明确地将其包含在触发器中。
—
Scott M