2014-10-17 4 views
0

Как проверить, что строка может быть удалена до удаления строки? Это похоже на разработку новой функции CanDelete (RowID).SQL Server - Как проверить строку можно удалить до удаления

У меня есть СПИСОК этих таблиц в другой таблице для некоторых строк.

В одном случае я могу это сделать, поймав исключение. Есть ли лучший способ?

+1

По сути, вы не можете заранее знать, будет ли сделка успешной или нет. Даже если ни одна строка в другой таблице не ссылается на указанную строку, может быть добавлена ​​другая строка, которая ссылается на нее между проверенным временем и временем, которое вы пытаетесь удалить. Сказав это, вы можете написать запрос, который подсчитывает количество строк в другой таблице, которые ссылаются на строку, которую вы хотите удалить, но это не надежное решение (и может быть медленнее, чем просто обработка исключения в первом место). – Cameron

+1

Запишите удаление в качестве хранимой процедуры или вместо триггера Delete с логикой для проверки внешних ключей перед удалением. – Crowcoder

ответ

0

Предполагая ваше требование, вы не хотите удалять строку, на которую ссылается другая таблица.

Я бы не оставил это до кода C#. Что делать, если разрабатывается другое приложение, которое удаляет или кто-то напрямую обращается к базе данных.

Сначала вы должны установить связь delete rule. Во-вторых, вы можете написать триггер для проверки перед удалением и помещать его там. Наконец, вы можете написать заявление о выводе с отсутствующим, например

DELETE from TableA where ID in (select ID from tableA a left outer join tableB b on a.ID = b.ID where b.ID is NULL) 
Смежные вопросы