2015-01-14 6 views
-1

У меня есть таблица с этими строкамиОграничение на 2 столбцов в таблице SQL Server,

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

Спасибо

ответ

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 операция не удастся.

+1

Я думаю, что это именно то, что OP * не хочет *, он хочет разрешить столько строк с помощью '(101, Prod1)', но он хочет * предотвратить * код (101), объединенный с любым * другая запись 'ProdX' - поэтому он хочет любое количество строк' (101, Prod1), но не таких, как '(101, Prod2)' или '(101, Prod3)', и этого не может быть достигнуто с помощью уникального ограничения .... –

+0

@marc_s Вы правы. Я полностью переписал свой ответ. –

+0

@GiorgosBetsos Спасибо! Я думал, что ограничение может справиться с этим. – user3145

Смежные вопросы