Sql server SQL Server约束以允许;“两个独特的”;价值观

Sql server SQL Server约束以允许;“两个独特的”;价值观,sql-server,sql-server-2012,constraints,check-constraints,Sql Server,Sql Server 2012,Constraints,Check Constraints,我有一张这样的桌子: 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 id fk\u id 1 1 2 1 3 1您应该创建

我有一张这样的桌子:

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
id fk\u id
1    1
2    1        

3 1您应该创建一个调用函数的检查约束;如果当前值(正在检查的当前值)有2个或更少的值,则函数返回1


check约束应该类似于check(dbo.FunctionCheckValidityOfValue=1)

update:check(dbo.FunctionCheckValidityOfValue()=1)您需要传入
fk\u id
,如果您让函数返回该值的计数,您可以放入

-- 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) )