1

У меня есть таблица customer и таблица order в базе данных sql server 2000.Проверка ссылочной целостности в хранимой процедуре

Я не хочу, чтобы быть в order таблицы с customerID, который не существует в customer таблицы, поэтому я поставил ограничение внешнего ключа на customerID.

Это все работает нормально, но при написании хранимой процедуры, которая могла бы нарушить ограничение, существует ли способ проверить, будет ли ограничение нарушено, и если это произойдет, пропустите/откатите запрос?

В то же время все, что происходит, это хранимая процедура возвращает ошибку, которая отображается на моей странице asp и выглядит довольно уродливой, и большинство пользователей не поймут ее.

Я хотел бы более элегантный способ обработки ошибки, если это возможно.

Благодаря

ответ

0

У вас есть два варианта:

  1. Добавить обработку поймать некрасиво ошибка, ошибка инспектировать его, чтобы увидеть, если это нарушение ограничения FK и отображать его пользователю. Это ИМХО лучшее решение.

  2. Добавить код в хранимой процедуре, как следующее:

if exists (select null from customer where [email protected]) 
begin 
    --The customer existed so insert order 
end 
else 
begin 
    --Do something to tell you code to display error message 
end 

Со второй вариант вы хотите смотреть согласованность транзакций. Например, что произойдет, если клиент будет удален после проверки.

0

Вы можете проверить данные, прежде чем пытаться выполнить операцию, либо вы можете попытаться операцию, а затем проверить ошибки после каждого утверждения, а затем откатить и т.д.

Но вы можете справиться с этим полностью внутри хранимых процедур и надлежащим образом вернуться вызывающий в соответствии с вашим дизайном.

Посмотрите на эту статью: http://www.sommarskog.se/error-handling-II.html

В SQL Server 2005 имеется возможность использования TRY/CATCH

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