0
我有這樣的一個表:SQL服務器的限制,允許「兩個唯一」值
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].[CheckParent](@parent_id int)
RETURNS bit
AS
BEGIN
DECLARE @result bit
DECLARE @count int
SELECT @count = COUNT(*) FROM mytable WHERE fk_id = @parent_id
IF @count <= 2
SET @result = 1
ELSE
SET @result = 0
RETURN @result
END
-- create the constraint
ALTER TABLE mytable
ADD CONSTRAINT CK_parent CHECK (([dbo].[CheckParent]([fk_id])=1))
更新:檢查(dbo.FunctionCheckValidityOfValue()= 1) –
你需要在'fk_id'通過,如果你讓函數返回該值的計數可以將'<= n'邏輯放在表定義中。 –