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

Откуда:
Сообщений: 443
Задача тригера, который представлен ниже такова:
Тригер на Update табл. TCurrency (в которой 2 поля: currency_id и currency_name). Если пользователь захочет изменить наименование валюты в табл. TCurrency, которая уже фигурирует в др таблицах производится откат транзакции и выдается сообщение, в кот написано, почему невозможно изменение. Вопрос такой: например, пользователь изменил валюту и после перехода на др строку выдается ошибка, НО само значение обратно не меняется, пока пользователь сам обратно его не поменяет на старое...ПОЧЕМУ?
CREATE TRIGGER tcurrency_update ON [dbo].[TCurrency] 

FOR UPDATE
AS begin
if exists (select * from TDocuments, Inserted
where TDocuments.currency_id=Inserted.currency_id)
begin
rollback transaction
raiserror 50002 'Изменение наименования валюты невозможно, так как она уже используется в других документах'
end
end


13 апр 04, 18:09    [626699]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
funikovyuri
Member

Откуда: Симферополь
Сообщений: 4045
Эх irinka! лучше плюньте на это дело - весна на улице - а тут если начать рассказывать - и до зимы не уложишься
13 апр 04, 18:22    [626737]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
irinka
Member

Откуда:
Сообщений: 443
Плюнуть не могу, а то на работе потом на меня ... и погонят за несделанную работу
13 апр 04, 18:33    [626761]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
irinka
Member

Откуда:
Сообщений: 443
причем если написать не raiserror, а print то при переходе на др строку значение меняется на старое, но сообщения никакого не выдается
CREATE TRIGGER tcurrency_update ON [dbo].[TCurrency]
FOR UPDATE
AS begin
if exists (select * from TDocuments, Inserted
where TDocuments.currency_id=Inserted.currency_id)
begin
rollback transaction
print 'Изменение наименования валюты невозможно, так как она уже используется в других документах'
end
end
13 апр 04, 18:35    [626768]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
Sherman
Guest
я не спец. но где у тебя вообще сказано о том, что это транзакция?

транзакция вроде так:

begin TRAN

а где-то в теле rollback TRAN ежели чего...

commit TRAN
13 апр 04, 18:53    [626805]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
irinka
Member

Откуда:
Сообщений: 443
Нужно откатить транзакцию, которую пользователь сделал, поэтому просто
as begin
условие, когда нужно совершать rollback (и если условию удовлетворяет, тогда переходит к rollback)
begin
rollback tran
raiserror
end
end
13 апр 04, 19:05    [626819]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
Guest
Guest
A u menya Vash TRIGGER rabotaet, tolko, po-moemu, nujno snachala RAISERROR, a potom ROLLBACK.

U Vas struktura tabliz kakaya - v oboix tablizax currency_id eto INT?
13 апр 04, 19:52    [626865]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
irinka
Member

Откуда:
Сообщений: 443
To Guest:
Да, везде int.
А что значит работает??? У меня он тоже работает, ошибку выдает, если начинаешь менять значение, которое уже задействовано в др табл, но значение обратно сам не меняет, т е не происходит так: выдал ошибку, пользователь нажал ОК и значение на глазах тут же вернулось как было...
13 апр 04, 20:40    [626910]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
Glory
Member

Откуда:
Сообщений: 104760
А сервер и не может ничего поменять на экране у клиента.
Наверное это должно сделать само клиентское приложение.
13 апр 04, 20:44    [626912]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
irinka
Member

Откуда:
Сообщений: 443
Хорошо, допустим, только я смотрю записи через Enteprise Manager и если писать не raiserror, а print, то при переходе на др строку значение меняется на старое
13 апр 04, 21:27    [626934]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
Glory
Member

Откуда:
Сообщений: 104760
EM - это тоже обыкновенное клиентское приложение. И он ведет себя в соответсвии с логикой, которую вложили в енго его создатели.
Для него MSSQLServer не делает каких-то особых действий по (пере)отображению результатов запросов.

Может быть вам лучше задать вопрос в форуме, посвященному именно тому средству разработки, которое вы используете ?
13 апр 04, 21:32    [626938]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
www.fun4me.narod.ru
Member

Откуда: Moscow
Сообщений: 2406
Посмотрите свой триггер в QA - он нормально в нём работает. А если в EM refresh сделать, то тоже всё нормально.
13 апр 04, 21:37    [626940]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
Guest
Guest
'Rabotaet' znachit ROLLBACK ispolnyaetsya, - ya tak dumayu, to, chto Vi xotite: vidaetsya SQL Server Error + Vashe soobschenue na RAISERROR i na sleduyuschuyu zapis pereuti nelzya, poka ne najmesh Esc, t.e. zapis ne izmenyaetsya. Iz ACCESSa probovala - toje 'rabotaet'.
U Vas tam drugix TRIGGERov net sluchayno?

Ya etim scriptom testirovala- poprobuyte sozdat vse snachala, mojet poluchitsya:
CREATE TABLE TCurrency ([currency_id] [int] ,[currency_name] [varchar] (10))
insert into TCurrency values(1,'CND')
insert into TCurrency values(2,'USD')
CREATE TABLE TDocuments ([currency_id] [int] )
insert into TDocuments values (1)
CREATE TRIGGER tcurrency_update ON dbo.TCurrency
FOR UPDATE
AS
if exists (select * from TDocuments , Inserted where TDocuments.currency_id=Inserted.currency_id)
begin
raiserror 50002 'Изменение наименования валюты невозможно, так как она уже используется в других документах'
rollback transaction
end
13 апр 04, 21:55    [626954]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
irinka
Member

Откуда:
Сообщений: 443
Я хочу чтоб:

после нажатия в окне сообщения ОК, это окно закрылось и сразу после активизации данной строки значение в ней изменилось на старое без дополнительных нажатий, наример, без ESC
14 апр 04, 19:46    [629405]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
Guest
Guest
У Вас-же clients не в Enterprise Manager работают, правильно?
То, что Вы хотите получить, должно быть сделано в клиентском приложении, как Вам Glory уже писал.
14 апр 04, 20:12    [629426]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
Nikro_
Member

Откуда:
Сообщений: 23
По любому переделай тригер на INSTED OF UPDATE и пусть он инсертит только в случае успешной проверки, по моему удобное решение, и никаких транзакций.
По моему трансакции правильнее использовать в целях сохранения целостности, а не для всяких там повседневных задач, или я не прав?
15 апр 04, 03:06    [629673]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
Nikro_
Member

Откуда:
Сообщений: 23
ТрАнСаКиИ ТраНZякциы........ заговорился млин!
15 апр 04, 03:09    [629674]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
irinka
Member

Откуда:
Сообщений: 443
Я прошу прощения, может вопрос и глуповат, но что есть такое INSTED of UPDATE (как я поняла это имеется в виду INSERTED of UPDATE, но даже если так, я никогда не использовала данное сочетание). Как это использовать?
15 апр 04, 17:50    [631477]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
irinka
Member

Откуда:
Сообщений: 443
Пока я не изменила тригер, хотелось все-таки попросить помощи:
В тригере написано в каком случае выдается сообщение и прозводится откат, какой в клиентском приложении (кот сделано в VB6.0) можно написать обработчик, который бы после нажатия ОК в окне сообщения в приложении менял бы значение на старое сам. На какое событие, как описать, что именно после ошибки, обработчик на которую в SQL Server в тригере...
не судите строго :)
15 апр 04, 18:00    [631519]     Ответить | Цитировать Сообщить модератору
 Re: Тригер на Update работает не так как хотелось бы, что нужно изменить?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Этот вопрос лучше задать в форуме по VB
15 апр 04, 18:05    [631531]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить