2014-11-04 2 views
0

Я пытаюсь написать запрос, который вместо ошибки:Try-Catch Сообщение об ошибке Ограничение внешнего ключа

INSERT statement conflicted with the FOREIGN KEY constraint...`

я могу иметь свою собственную ошибку. Что-то вроде:

< Value > does not exist on < table_name >

TEST TABLE1:      TEST TABLE2 

Col1 PK tinyint     Col2 PK tinyint 
Col2 FK tinyint 

Я сделал следующий триггер как тест:

CREATE TRIGGER [dbo].[CHECK_INSERT] 
FOR INSERT 
ON TABLE1 
AS 
BEGIN 
    DECLARE @loop AS TINYINT 
    DECLARE @col1 AS TINYINT 
    DECLARE @col2 AS TINYINT 
    SELECT @loop = MIN (col1) FROM INSERTED 
    SELECT @col1 = col1 FROM INSERTED WHERE col1 = @loop 
    SELECT @col2 = col2 FROM INSERTED WHERE col1 = @loop 

    IF NOT EXISTS (SELECT col2 FROM TABLE2 WHERE col2 = @col2) 
    AND ERROR_NUMBER() = 547 
    BEGIN 
      RAISERROR('%s does not exists on Table2', 16, 1, CAST(@col2 AS VARCHAR(3)) 
      ROLLBACK TRANSACTION 
    END 
END 

Как я могу справиться с этой ошибкой? Спасибо.

ответ

0

Вы можете добавить инструкцию insert в try/catch, но я думаю, что сначала вам нужен триггер INSTEAD OF INSERT.

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