Эффективный способ удалить несколько строк в sp одним вызовом - PullRequest
0 голосов
/ 28 декабря 2011

Следующий запрос возвращает мне две строки:

SELECT 
DocList.DocListId, RegistrationDocList.RegistrationDocListId, Registration.RegistrationId 
FROM 
DocList INNER JOIN
RegistrationDocList ON DocList.DocListId = RegistrationDocList.DocListId INNER JOIN
Registration ON RegistrationDocList.RegistrationId = Registration.RegistrationId
WHERE (DocList.DocListId = 547)

Результаты:

--------------------------------------------------------
DocListId   RegistrationDocListId    RegistrationId
-------------------------------------------------------
547              097                     115
547              098                     116

ОБНОВЛЕНИЕ:

, как вы можете видеть егоиспользуя три таблицы, поэтому я хочу удалить строки из:

DocList where doclistid = 547
RegistrationDocList.RegistrationId  where RegistrationId in (097,098)
Registration.RegistrationId  where RegistrationId in (115,116)

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

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

DECLARE @Result int

BEGIN TRAN
    BEGIN TRY
        DELETE DocList where doclistid = 547
        DELETE RegistrationDocListwhere RegistrationId in (097,098)
        DELETE Registration where RegistrationId in (115,116)

        /* code was done properly => mark flag as OK */
        SET @Result = 0
    END TRY
    BEGIN CATCH
        /* some error occured => mark flag as ERROR */
        SET @Result = -1
    END CATCH

IF @Result = 0 BEGIN
    /* all is fine, transaction can be commited */
    COMMIT TRAN
END
ELSE BEGIN
    /* something is wrong, transaction must be rolled back */
    ROLLBACK TRAN
END
0 голосов
/ 28 декабря 2011

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

DECLARE @reg_to_delete TABLE (id int)

INSERT INTO @reg_to_delete (id)
SELECT RegistrationID FROM RegistrationDocList WHERE DocListID = 547

DELETE FROM RegistrationDocList WHERE DocListID = 547

DELETE FROM RegistrationList WHERE RegistrationID IN (SELECT id FROM @reg_to_delete)

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