Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Rollback  [new]
tiproktikum
Member

Откуда:
Сообщений: 61
В документации на сайте Microsoft написано: "Инструкция ROLLBACK TRANSACTION не выдает никаких сообщений пользователю". Я использую ее в триггере:

if @TaskState >= 10       
      begin
        ROLLBACK TRAN;
      end


А она реально выдает сообщение пользователю:

Транзакция завершилась в триггере. Выполнение пакета прервано.


Как избавиться от этого сообщения, мне нужно что бы триггер просто отменял транзакцию, начатую не в нем, втихаря. :)
8 дек 14, 10:40    [16964875]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
Glory
Member

Откуда:
Сообщений: 104751
tiproktikum
А она реально выдает сообщение пользователю:

Это не она. Это сервер реагирует на на вашу ROLLBACK в триггере
О чем написано далее в хелпе
"Если инструкция ROLLBACK TRANSACTION запускается в триггере, происходит следующее:..."
8 дек 14, 10:43    [16964888]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
tiproktikum
Member

Откуда:
Сообщений: 61
Glory
tiproktikum
А она реально выдает сообщение пользователю:

Это не она. Это сервер реагирует на на вашу ROLLBACK в триггере
О чем написано далее в хелпе
"Если инструкция ROLLBACK TRANSACTION запускается в триггере, происходит следующее:..."


В итоге не получится убрать это сообщение?
8 дек 14, 12:43    [16965630]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
Glory
Member

Откуда:
Сообщений: 104751
tiproktikum
В итоге не получится убрать это сообщение?

Не делайте ROLLBACK TRANSACTION в триггере
8 дек 14, 12:51    [16965675]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Триггер может сообщить об ошибке, а что делать с это ошибкой - решает программа.
8 дек 14, 13:14    [16965858]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
tiproktikum
Member

Откуда:
Сообщений: 61
К сожалению, нет доступа к исходному коду программы. Это программа не нашей компанией написана.
8 дек 14, 14:37    [16966435]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
tiproktikum,

тогда остается instead of триггер.
8 дек 14, 14:48    [16966534]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
tiproktikum
Member

Откуда:
Сообщений: 61
Владислав Колосов
tiproktikum,

тогда остается instead of триггер.


Почитал про триггеры INSTEAD OF UPDATE, если я правильно понял, такой триггер заменит действие Update, который пытается произвести программа. А может ли он заменять по условию: т.е. если <условие>, то заменить, иначе разрешить выполнять исходный Update?
8 дек 14, 14:56    [16966617]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
tiproktikum
Владислав Колосов
tiproktikum,

тогда остается instead of триггер.


Почитал про триггеры INSTEAD OF UPDATE, если я правильно понял, такой триггер заменит действие Update, который пытается произвести программа. А может ли он заменять по условию: т.е. если <условие>, то заменить, иначе разрешить выполнять исходный Update?
В триггере INSTEAD OF UPDATE работает то, что напишете Вы сами!
Всё, что угодно!

Но надо ещё посмотреть на RAISERROR() вместо ROLLBACK. Вдруг поможет?
8 дек 14, 14:59    [16966641]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
Glory
Member

Откуда:
Сообщений: 104751
tiproktikum
К сожалению, нет доступа к исходному коду программы. Это программа не нашей компанией написана.

А что программа не должна узнать, что изменения отменены ?
8 дек 14, 15:00    [16966656]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
tiproktikum
Member

Откуда:
Сообщений: 61
Glory
tiproktikum
К сожалению, нет доступа к исходному коду программы. Это программа не нашей компанией написана.

А что программа не должна узнать, что изменения отменены ?


Да пусть узнает, это не важно.
Важно только одно: отменить транзакцию без вывода на экран сообщения!
8 дек 14, 15:04    [16966679]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
Glory
Member

Откуда:
Сообщений: 104751
tiproktikum
Да пусть узнает, это не важно.
Важно только одно: отменить транзакцию без вывода на экран сообщения!

Т.е. пользователь ничего не должен узнать о происходящем на сервере ?
8 дек 14, 15:05    [16966688]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
tiproktikum
Member

Откуда:
Сообщений: 61
Glory
tiproktikum
Да пусть узнает, это не важно.
Важно только одно: отменить транзакцию без вывода на экран сообщения!

Т.е. пользователь ничего не должен узнать о происходящем на сервере ?


Да, потому что это сообщение выходит в цикле по каждой записи и всех нервирует )))
8 дек 14, 15:08    [16966711]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
tiproktikum
Member

Откуда:
Сообщений: 61
iap
Но надо ещё посмотреть на RAISERROR() вместо ROLLBACK. Вдруг поможет?


Так вот RAISERROR() тоже выводит сообщение, а мне же без него надо. Я, конечно, не оч. разбираюсь, может он как то без вывода сообщений работать может.
8 дек 14, 15:10    [16966718]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
Glory
Member

Откуда:
Сообщений: 104751
tiproktikum
Да, потому что это сообщение выходит в цикле по каждой записи и всех нервирует )))

Т.е. пользователя не интересует, что стало с его данными/изменениями/действиями ?
8 дек 14, 15:16    [16966756]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
tiproktikum
Member

Откуда:
Сообщений: 61
Glory
tiproktikum
Да, потому что это сообщение выходит в цикле по каждой записи и всех нервирует )))

Т.е. пользователя не интересует, что стало с его данными/изменениями/действиями ?


Да, верно.

Ситуация в чем: пользователь меняет имя клиента в своем заказе, у которого состояние "Закрыт", а программа, зачем то, в этот момент пересчитывает весь этот заказ (а цены то уже могли поменяться), хотя должна была просто поменять клиента. Вот я и хочу сделать так, что бы если состояние заказа "Закрыт", то кроме того что поменять клиента делать ничего не надо, содержимое заказа пересчитывать не нужно. При этом, естественно, пользователю сообщений выдавать тоже не нужно, он и так надеется на то, что только клиент и поменяется.
8 дек 14, 15:24    [16966804]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
Glory
Member

Откуда:
Сообщений: 104751
tiproktikum
Ситуация в чем: пользователь меняет имя клиента в своем заказе, у которого состояние "Закрыт", а программа, зачем то, в этот момент пересчитывает весь этот заказ (а цены то уже могли поменяться), хотя должна была просто поменять клиента. Вот я и хочу сделать так, что бы если состояние заказа "Закрыт", то кроме того что поменять клиента делать ничего не надо, содержимое заказа пересчитывать не нужно. При этом, естественно, пользователю сообщений выдавать тоже не нужно, он и так надеется на то, что только клиент и поменяется.

Триггер ОТМЕНЯЕТ транзакцию, т.е. все изменения, а пользователю это неинтересно ?
8 дек 14, 15:27    [16966810]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Glory
Триггер ОТМЕНЯЕТ транзакцию, т.е. все изменения, а пользователю это неинтересно ?
Пользователь отменяет транзакцию, и ему неинтересно читать это на экране 100500 раз. Я так это понял.
Что поделать, обычная ситуация, программа кривая, а попросить разработчиков поправить стесняются.
8 дек 14, 15:40    [16966903]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
tiproktikum
Member

Откуда:
Сообщений: 61
alexeyvg
Glory
Триггер ОТМЕНЯЕТ транзакцию, т.е. все изменения, а пользователю это неинтересно ?
Пользователь отменяет транзакцию, и ему неинтересно читать это на экране 100500 раз. Я так это понял.
Что поделать, обычная ситуация, программа кривая, а попросить разработчиков поправить стесняются.


Да все верно. Только не стесняемся, а как обычно менять ничего не могут, времени у них нет на каждое такое пожелание. Это вопросы не ко мне. Моя задача сделать так, что бы не выходило сообщение.
8 дек 14, 17:08    [16967486]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
Glory
Member

Откуда:
Сообщений: 104751
alexeyvg
Пользователь отменяет транзакцию, и ему неинтересно читать это на экране 100500 раз. Я так это понял.

Какой пользователь, если

tiproktikum
Я использую ее в триггере:

if @TaskState >= 10       
      begin
        ROLLBACK TRAN;
      end

Если пользователь жмет на экране какую-то кнопку и прерывает запрос, то сервер никаких сообщений ему не выдает
9 дек 14, 11:12    [16970751]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
tiproktikum
Member

Откуда:
Сообщений: 61
Glory
alexeyvg
Пользователь отменяет транзакцию, и ему неинтересно читать это на экране 100500 раз. Я так это понял.

Какой пользователь, если

tiproktikum
Я использую ее в триггере:

if @TaskState >= 10       
      begin
        ROLLBACK TRAN;
      end

Если пользователь жмет на экране какую-то кнопку и прерывает запрос, то сервер никаких сообщений ему не выдает


Я выше писал: пользователь меняет значение поля "Имя клиента" у Заказа, Заказ содержит несколько изделий, программа пытается при этой операции (смена клиента) пересчитать цены всех изделий. Задача: не позволить ей это сделать если состояние Заказа >= 10. И она решается с помощью ROLLBACK TRAN, но при этом по каждому изделию выдается сообщение о том, что транзакция завершилась в триггере, юзеры беснуются, надо либо порекомендовать хорошие успокоительные, либо убрать сообщения.
9 дек 14, 12:00    [16971048]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
Glory
Member

Откуда:
Сообщений: 104751
tiproktikum
Задача: не позволить ей это сделать если состояние Заказа >= 10. И она решается с помощью ROLLBACK TRAN, но при этом по каждому изделию выдается сообщение о том, что транзакция завершилась в триггере, юзеры беснуются, надо либо порекомендовать хорошие успокоительные, либо убрать сообщения.

Т.е. пользователь в итоге вообще не узнает, что он ничего не смог поменять ?
И что значит "по каждому изделию" ? У вас там цикл что ли по каждой позиции каждого заказа ?
9 дек 14, 12:05    [16971096]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
tiproktikum
Glory
пропущено...

Какой пользователь, если

пропущено...

Если пользователь жмет на экране какую-то кнопку и прерывает запрос, то сервер никаких сообщений ему не выдает


Я выше писал: пользователь меняет значение поля "Имя клиента" у Заказа, Заказ содержит несколько изделий, программа пытается при этой операции (смена клиента) пересчитать цены всех изделий. Задача: не позволить ей это сделать если состояние Заказа >= 10. И она решается с помощью ROLLBACK TRAN, но при этом по каждому изделию выдается сообщение о том, что транзакция завершилась в триггере, юзеры беснуются, надо либо порекомендовать хорошие успокоительные, либо убрать сообщения.
Ну так сделайте уже триггер INSTEAD OF UPDATE!
Уже столько времени прошло!
9 дек 14, 12:05    [16971098]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
tiproktikum
Member

Откуда:
Сообщений: 61
Владислав Колосов
tiproktikum,

тогда остается instead of триггер.


По-моему это не решение, я же не могу заменить Update который делает программа, я его ведь даже не знаю.
Если я правильно понял, то instead of update отменяет исходный запрос в любом случае, а далее я делаю что хочу: либо пишу заново этот Update либо ничего не делаю
9 дек 14, 12:06    [16971109]     Ответить | Цитировать Сообщить модератору
 Re: Rollback  [new]
Glory
Member

Откуда:
Сообщений: 104751
tiproktikum
По-моему это не решение, я же не могу заменить Update который делает программа, я его ведь даже не знаю.

Вам и не нужно его знать.
Вы же напишите свой update
tiproktikum
Если я правильно понял, то instead of update отменяет исходный запрос в любом случае, а далее я делаю что хочу: либо пишу заново этот Update либо ничего не делаю

именно
9 дек 14, 12:08    [16971132]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить