我有一个包含这些行的表
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
谢谢
答案 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
后,如果已有产品具有相同代码且产品编号不同,则UPDATE
或INSERT
操作将失败。