SQL-запросы для создания точки отката и отката к этой конкретной точке - PullRequest
1 голос
/ 15 апреля 2010

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

  1. Смена пароля
  2. Разблокировать аккаунт (только разблокировка аккаунта, без смены пароля!)

Я хочу вернуть успех, только если обе транзакции успешны. Скажем, если смена пароля удалась и разблокировка не удалась, я не могу отправить успех или неудачу. Поэтому я хочу создать точку отката до смены пароля, если оба запроса будут выполнены успешно, я совершу транзакцию. Если один из запросов завершится неудачно, я откажусь от изменений, вернувшись к точке отката. Я делаю это в C ++, используя ADO. Есть ли какие-либо SQL-запросы, с помощью которых я могу создать точку отката и вернуться к точке отката и совершить транзакцию

Я использую следующие команды для Смена пароля

ALTER LOGIN [username] WITH PASSWORD = N'password'

для разблокировки аккаунта

ALTER LOGIN [%s] WITH CHECK_POLICY = OFF
ALTER LOGIN [%s] WITH CHECK_POLICY = ON

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

Santhosh

Ответы [ 2 ]

1 голос
/ 15 апреля 2010

Характер операторов DDL заключается в том, что каждый из них составляет свою собственную дискретную транзакцию. Подумайте об этом так: команда COMMIT выдается в начале инструкции DDL, а другая - в конце успешного завершения инструкции. Нет возможности откатить успешный оператор DDL. Узнайте больше.

Однако синтаксис ALTER LOGIN позволит вам объединить операторы смены и разблокировки пароля в один:

ALTER LOGIN [username] WITH PASSWORD = 'password' UNLOCK ;

Нет единого оператора, чтобы разблокировать пароль без изменения пароля, поэтому для этой опции вам нужно переключить CHECK_OPTION описанным способом.

0 голосов
/ 15 апреля 2010

некоторые SQL поддерживают транзакции. Поместите запросы в блок транзакции. Если какой-либо запрос не выполняется внутри блока, все откатывается. Вот как это выглядит для MySQL:

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