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