我有一张这样的桌子:
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执行此操作吗?也许检查约束?
解决方案:
-- 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) )
您应该创建一个调用函数的检查约束。如果当前值(正在检查的当前值)的值小于或等于2,则函数返回1。
检查约束应该类似于check(dbo.FunctionCheckValidityOfValue = 1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句