微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – 如何将表中的最大行数限制为1

我的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功能吗?

解决方法

这两个约束会做:
CREATE TABLE dbo.Configuration
( ConfigurationID tinyint NOT NULL DEFAULT 1,-- the rest of the columns
  CONSTRAINT Configuration_PK 
    PRIMARY KEY (ConfigurationID),CONSTRAINT Configuration_OnlyOneRow 
    CHECK (ConfigurationID = 1)
) ;

您需要PRIMARY KEY(或UNIQUE约束),因此没有两行具有相同的ID值和CHECK约束,因此所有行都具有相同的ID值(任意选择为1).
在组合中,两个几乎相反的约束将行数限制为零或一.

在虚构的DBMS(当前没有sql实现允许这种构造)允许由0列组成的主键上,这也是一个解决方案:

CREATE TABLE dbo.Configuration
( -- no ConfigurationID needed at all
  -- the rest of the columns
  CONSTRAINT Configuration_PK 
    PRIMARY KEY ()                -- 0 columns!
) ;

原文地址:https://www.jb51.cc/mssql/80120.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐