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