sql-server – 如何将表中的最大行数限制为1
发布时间:2021-01-11 03:10:06 所属栏目:MsSql教程 来源:网络整理
导读:我的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!
) ; (编辑:清远站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

