我有一张像这样的表:
id fk_id
1 1
2 1
3 2
4 3
5 3
字段fk_id引用另一个表,我想创建一个约束以允许每个fk_id最多插入两个。
我想阻止这个:
id fk_id
1 1
2 1
3 1 <-- FAIL
4 3
5 3
这是“一对多(但最多2个)”或“一对一(或两个)”的关系 - 我不知道如何命名。
我可以使用MS SQL Server执行此操作吗?也许是CHECK CONSTRAINT?
SOLUTION:
-- function to check if there are more then two rows
CREATE FUNCTION [dbo].[CheckMaxTwoForeignKeys](@check_id int)
RETURNS bit
AS
BEGIN
DECLARE @result bit
DECLARE @count int
SELECT @count = COUNT(*) FROM mytable WHERE fk_id = @check_id
IF @count <= 2
SET @result = 1
ELSE
SET @result = 0
RETURN @result
END
-- create the constraint
ALTER TABLE mytable
ADD CONSTRAINT CK_MaxTwoFK CHECK ( ([dbo].[CheckMaxTwoForeignKeys]([fk_id])=1) )
答案 0 :(得分:3)
您应该创建一个调用函数的检查约束;如果当前值(正在检查的当前值)有2个或更少的值,则该函数返回1.
检查约束应该类似于check(dbo.FunctionCheckValidityOfValue = 1)