加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

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

发布时间:2021-01-11 05:28:24 所属栏目:编程 来源:网络整理
导读:我的SQL Server数据库中有一个设置表,这个表应该只有一行.为了辅佐将来的开拓职员领略这一点,我想阻止添加多行数据.我选择行使触发器,如下所示…… ALTER TRIGGER OnlyOneConfigRow ON [dbo].[Configuration] INSTEAD OF INSERTASBEGIN DECLARE @HasZeroRows

我的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!
) ;

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读