【发布时间】:2014-11-17 11:27:59
【问题描述】:
我有一张这样的桌子:
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) )
【问题讨论】:
标签: sql-server sql-server-2012 constraints check-constraints