Ale*_*lex 7 sql database sql-server
我有一个数据库,有两个表Ads
和Images
. 表中有一个主键adid
,Ads
它是表中的外键Images
。
我想在表上创建一个约束,表Images
中adid
最多可以存储5 个Images
。
我需要知道这种类型的约束被称为什么,以及如何通过 SQL Server 中的查询来实现这一点。
没有强制执行该规则的约束,但是像下面这样的触发器可以做到:
CREATE TRIGGER Images_not_more_than_five_per_add
ON Images FOR INSERT
AS
DECLARE @RowCount int
SET @RowCount = @@ROWCOUNT
SET NOCOUNT ON
IF @RowCount = 1
BEGIN
IF (SELECT COUNT(*) FROM Images WHERE Images.addid = (SELECT addid FROM inserted)) > 5
BEGIN
RAISERROR('No more than five images per add are allowed', 16, -1)
ROLLBACK
RETURN
END
END
ELSE
BEGIN
IF EXISTS (
SELECT *
FROM
Images
INNER JOIN (
SELECT DISTINCT addid FROM inserted
) I ON Images.addid = I.addid
GROUP BY
Images.addid
HAVING COUNT(*) > 5
)
BEGIN
RAISERROR('No more than five images per add are allowed', 16, -1)
ROLLBACK
RETURN
END
END
Run Code Online (Sandbox Code Playgroud)