Как я могу удалить одну запись из двух таблиц? - PullRequest
2 голосов
/ 22 февраля 2011

Мне просто интересно, смогу ли я удалить запись из двух разных таблиц.

Я думаю, что мне нужен оператор поиска, но я не уверен, с чего начать.

ВВ обеих таблицах у меня есть поле с именем CardID.

В моей первой таблице есть оператор, который гласит:

delete from Table1
where recordstatus = 2
and expiry <=(Select convert(varchar(8),today,112)
from(Select dateadd(year,-1,getdate())as today)aa)

, затем мне нужно удалить запись из таблицы 2.

Любая помощь будет высоко ценится

Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 22 февраля 2011
DECLARE @deleted TABLE (CardID int);

delete from Table1
OUTPUT deleted.CardID INTO @deleted (CardID)
where recordstatus = 2
and expiry <=(Select convert(varchar(8),today,112)
from(Select dateadd(year,-1,getdate())as today)aa);

DELETE FROM Table2
FROM @deleted d
WHERE Table2.CardID = d.CardID;

При удалении из Table1 вы также сохраняете удаленные значения CardID в табличную переменную (добавленное предложение OUTPUT).Затем вы используете этот список для удаления из Table2 соответственно.

Если вам всегда необходимо удалить из двух таблиц синхронно, триггер для удаления на Table1 подойдет здесь лучше,Я думаю.

0 голосов
/ 22 февраля 2011

УДАЛИТЬ t2 из таблицы 2 как t2 присоединиться к таблице 1 как t1 на t1.CardID = t2.CardID где t1.recordstatus = 2 и t1.expiry <= (Выберите команду convert (varchar (8), сегодня, 112) from (выберите dateadd (year, -1, getdate ()) как сегодня) aa) <br/>
это будет ваш первый запрос на удаление, чтобы удалить записи из таблицы2, а затем использовать исходный запрос для удаления записей из таблицы1 ... и в этом запросе, если я пропустил какое-либо поле, добавьте t1. до этого как я добавил t1.expiry

0 голосов
/ 22 февраля 2011

Попробуйте это

DELETE FROM Table2 
WHERE  CardID IN (SELECT CardID from Table1 
    where recordstatus = 2 and expiry <=
    (Select convert(varchar(8),today, 112) 
    from(Select dateadd(year,-1,getdate()) as today) aa ));

delete from Table1 where recordstatus = 2 
and expiry <=(Select convert(varchar(8),today, 112)
    from(Select dateadd(year,-1,getdate()) as today) aa );
0 голосов
/ 22 февраля 2011

Есть ли причина, по которой вы не хотите выдавать два разных запроса? Это было бы самым простым решением. Полагаю, что мешает вам сделать это, так это то, что у вас может не быть правильной структуры первичных / внешних ключей в вашей базе данных.

Если вы действительно хотите использовать только один запрос, вы можете посмотреть триггеры и / или каскадные обновления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...