ИЗМЕНЕНИЕ ПРОЦЕДУРЫ С СДЕЛКОЙ - PullRequest
0 голосов
/ 07 февраля 2012

Мне нужно изменить прибл.24 огромных UDP и для производственного развертывания мне нужно выполнить BEGIN TRANSACTION / ROLLBACK / COMMIT PROCESS.

Как добавить ALTER PROCEDURE my_proc между BEGIN TRANSACTION и COMMIT или ROLLBACK?

Примечание : EXEC('ALTER PROCEDURE..') можно НЕ быть реализованным.

Спасибо

Обновление: есть ли способ изменить процедуру и выполнить откат в случае сбоя?

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

(Леандро, я добавляю новый ответ, потому что это будет слишком долго для компента)

Я думал.Я не думаю, что это решение, которое я бы когда-либо реализовал, но исходя из ваших требований (и особенно ваших ограничений), вот идея, которая будет работать:

В каталоге sys.objects есть дата modify_dateИтак, почему бы не сохранить даты всех ваших объектов перед запуском обновлений и сравнить с датами после запуска обновлений.Если ВСЕ даты разные, это означает, что все они были обновлены правильно, если одна из дат совпадает, это означает, что одна из них не удалась, а затем вы запустите сценарий отката (вам понадобится код отката, будет непросто).просто наберите ROLLBACK)

1 голос
/ 07 февраля 2012

почему ты не можешь обычным способом.

BEGIN TRANSACTION
GO

CREATE PROCEDURE testProcedure
AS
    SELECT 1
GO

SELECT OBJECT_ID('testProcedure') ObjectID --this will return the object ID
GO

rollback TRANSACTION

SELECT OBJECT_ID('testProcedure') ObjectID  --this will return NULL because the proc creation was rolled back
GO

У вас не может быть BEGIN TRY и BEGIN CATCH вокруг партий. Однако вы можете использовать последний пакет, чтобы убедиться, что все предыдущие шаги выполнены успешно (например, путем просмотра представлений каталога, таких как sys.objects). Затем вы можете решить, все ли успешно выполнено, и зафиксировать или откатить.

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