SQL Server表中2列的约束

时间:2015-01-14 14:24:07

标签: sql sql-server constraints

我有一个包含这些行的表

ID       Code      Prod
-------------------------
1        101       Prod1
2        102       Prod2
3        101       Prod1
4        101       Prod2 -- here I want to prohibit insert

所以我需要Code只存在一个Prod

使用唯一索引它是不可能的,因为我在多行中有相同的101-Prod1,但我不想在101另一个Prod

谢谢

1 个答案:

答案 0 :(得分:2)

您可以使用TRIGGER

来实现您的目标
CREATE TRIGGER [dbo].[trg_ProhibitDupls] ON [dbo].[Products]
   AFTER UPDATE, INSERT
AS  

IF EXISTS (
    SELECT 1
    FROM Products
    WHERE Code = (SELECT code FROM inserted) AND Prod <> (SELECT prod FROM inserted)
)
BEGIN
    RAISERROR ('A different product number for this code already exists!',16, 1)
    ROLLBACK TRANSACTION
END

使用上述TRIGGER后,如果已有产品具有相同代码且产品编号不同,则UPDATEINSERT操作将失败。