Как удалить FK один ко многим? - PullRequest
0 голосов
/ 16 марта 2009

У меня есть таблица (aspnet_Membership), в которой есть спам-записи, которые мне нужно удалить. Есть некоторые внешние ключи, и я пытаюсь написать простую инструкцию SQL для удаления FK, чтобы я мог удалить основную запись.

Итак, есть таблица aspnet_UsersInRoles, в которой есть UserID и RoleID, а в моей таблице aspnet_Membership есть UserID. Я не могу удалить Пользователя, не оставив сироту в записи (в любом случае, не позволил бы мне это сделать из-за ограничений).

Как я могу по существу запустить следующее:

'delete from 'aspnet_UsersInRoles' where UserID in 'aspnet_Membership' and 'aspnet_Membership.CreateDate >= '03/15/2009'?

Спасибо за любые предложения.

Ответы [ 2 ]

4 голосов
/ 16 марта 2009

Что ж, вы, вероятно, могли бы настроить внешние ключи для каскадного удаления, чтобы вам не пришлось об этом беспокоиться, но ваша попытка запроса была довольно близка к той, которая будет работать, просто используйте подзапрос:

DELETE FROM aspnet_UsersInRoles WHERE UserID IN (SELECT UserID FROM aspnet_Membership WHERE aspnet_Membership.CreateDate >= '03/15/2009')
1 голос
/ 16 марта 2009

Вы можете изменить ограничения для создания каскада при удалении: ссылка

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

...