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

Откуда:
Сообщений: 29
CREATE TRIGGER [dbo].[update_no]
ON [dbo].[People]
AFTER update
AS
BEGIN
SET NOCOUNT ON;
IF (SELECT homephone FROM INSERTED)<0
PRINT'Number cannot be a negative digit'
ROLLBACK
END

Этот триггер должен запрещать менять номер телефона на отрицательные цифры, но почему-то я теперь не могу вообще ничего изменть(в приложении на C#). В чем беда?
12 янв 12, 18:33    [11894820]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Exception_E,

наверное в том что inserted может содержать больше одной записи
12 янв 12, 18:37    [11894852]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Exception_E,

у блин не досмотрел а rollback то у вас ваще не привязан к if:) конечно ничего не будет меняться
12 янв 12, 18:38    [11894863]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Exception_E, условно выполняется только print, а rollback всегда
12 янв 12, 18:39    [11894871]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Exception_E
Member

Откуда:
Сообщений: 29
Ну я поставил BEGIN - END, если Вы к этому вели. Я видимо не так проблему изложил. По идее у меня не должно быть возможности менять только номер телефона, но я почему-то не могу изменить м другие записи...
12 янв 12, 18:42    [11894893]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Exception_E
Member

Откуда:
Сообщений: 29
Так что народ не поможете поправить?
12 янв 12, 18:50    [11894953]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
aleks2
Guest
CREATE TRIGGER [dbo].[update_no]
ON [dbo].[People]
AFTER update
AS
BEGIN
  SET NOCOUNT ON;
  IF exists(SELECT * FROM INSERTED WHERE homephone<0) begin
    raserror('Number cannot be a negative digit', 16, 1)
  end;
END
12 янв 12, 19:09    [11895046]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Exception_E
Member

Откуда:
Сообщений: 29
Всёравно - нельзя никакие поля менять теперь, а нужно только для телефона ((
12 янв 12, 19:14    [11895077]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Exception_E
Всёравно - нельзя никакие поля менять теперь, а нужно только для телефона ((
"нельзя никакие поля менять" - это сообщение об ошибке, что ли?
12 янв 12, 19:15    [11895081]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Exception_E
CREATE TRIGGER [dbo].[update_no]
ON [dbo].[People]
AFTER update
AS
BEGIN
SET NOCOUNT ON;
IF (SELECT homephone FROM INSERTED)<0
PRINT'Number cannot be a negative digit'
ROLLBACK
END

Этот триггер должен запрещать менять номер телефона на отрицательные цифры, но почему-то я теперь не могу вообще ничего изменть(в приложении на C#). В чем беда?


а нафига тут вообще триггер?
добавте обычный констрейнт на поле с номером...
12 янв 12, 19:18    [11895095]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Exception_E
Member

Откуда:
Сообщений: 29
У меня в приложении TRY-CATCH. В случае TRY - выполяется изменение полей(всё работает без триггера). А в CATCH я поставил сообщение просто, что "триггер блокирует". Крч говоря триггер запрещает изменять все поля, а надо только "homephone"
12 янв 12, 19:20    [11895104]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Exception_E
Member

Откуда:
Сообщений: 29
Knyazev Alexey, мне нужно именно использовать триггеры, функции, курсоры и т.д.
12 янв 12, 19:21    [11895111]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Exception_E
У меня в приложении TRY-CATCH. В случае TRY - выполяется изменение полей(всё работает без триггера). А в CATCH я поставил сообщение просто, что "триггер блокирует". Крч говоря триггер запрещает изменять все поля, а надо только "homephone"
Ваше приложение сохраняет запись целиком. Триггер, если там что-то не так, откатывает все изменения. В общем, как написали, так и работает.
12 янв 12, 19:25    [11895141]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Exception_E
Member

Откуда:
Сообщений: 29
Ну ок, Вы сможете подкорректировать? Я не очень силён в этом...
12 янв 12, 19:34    [11895179]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Exception_E
Ну ок, Вы сможете подкорректировать? Я не очень силён в этом...
С чего вы взяли, что надо что-то корректировать? Нормальное поведение.
12 янв 12, 19:42    [11895225]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Exception_E
Member

Откуда:
Сообщений: 29
Я же объяснил проблему...
12 янв 12, 19:46    [11895260]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Exception_E
Member

Откуда:
Сообщений: 29
Никто не поможет?
12 янв 12, 20:24    [11895432]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31985
Exception_E
Никто не поможет?
Проблема то какая, вы можете внятно объяснить? Просто какой то бессмысленный набор слов.
12 янв 12, 20:58    [11895570]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Exception_E
Member

Откуда:
Сообщений: 29
Мне нужен триггер, который будет запрещать изменять значение поля "homephone" на отрицательное. Т.е. если изменяю на -1, то выскакивает ошибка.Всё!
Тот триггер, который я Вам показал, работает неправильно.
12 янв 12, 21:01    [11895578]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
телефонный интеджер внезапно
Guest
Exception_E
Всёравно - нельзя никакие поля менять теперь, а нужно только для телефона ((

наверно для начала стоит разобраться что такое вобще триггер и на что он реагирует.
не мешает также разобраться с тем, для отката изменений чего существует rollback.
какой единицей информации они все оперируют?

если хелп читать лень или непонятно, попробуйте так:
CREATE TRIGGER [dbo].[update_no]
ON [dbo].[People]
AFTER update COLUMN homephone
AS
BEGIN
  SET NOCOUNT ON;
  
  IF exists(SELECT * FROM UPDATED WHERE homephone<0) 
  begin
      ROLLBACK homephone FROM UPDATED
      OUTPUT COMMIT ALL
      WITH (black jack and hookers)
  
      raiserror('Number cannot be a negative digit mthfckr!', 16, 1)
  end;
END

отпишитесь о результатах.
12 янв 12, 21:07    [11895591]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Exception_E
Я же объяснил проблему...
Нет у вас проблемы. Триггер запрещает изменять запись, если в нее введены некорректные данные. Это нормальное поведение. Все остальные проверки реализуются в клиентском приложении и должны выполняться до того, как данные будут меняться на сервере.
12 янв 12, 21:23    [11895647]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Exception_E
Member

Откуда:
Сообщений: 29
Одни ошибки...
Msg 156, Level 15, State 1, Procedure update_no, Line 3
Incorrect syntax near the keyword 'COLUMN'.
Msg 102, Level 15, State 1, Procedure update_no, Line 9
Incorrect syntax near 'homephone'.
Msg 319, Level 15, State 1, Procedure update_no, Line 11
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon.
А Вы сами проверяли?
12 янв 12, 21:25    [11895658]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Exception_E
Member

Откуда:
Сообщений: 29
Гавриленко Сергей Алексеевич,
Ну мы же в самом триггере указываем конкретное поле - HOMEPHONE. Но почему-то триггер срабатывает на все поля. Где ж это нормально??!!
12 янв 12, 21:34    [11895707]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Exception_E
Гавриленко Сергей Алексеевич,
Ну мы же в самом триггере указываем конкретное поле - HOMEPHONE. Но почему-то триггер срабатывает на все поля. Где ж это нормально??!!
Триггер всю жизнь срабатывал на команду. Не на поля, не на записи, а на команду, которую выуказываете после ключевого слова AFTER.
12 янв 12, 21:35    [11895718]     Ответить | Цитировать Сообщить модератору
 Re: Неправильно работает триггер  [new]
Exception_E
Member

Откуда:
Сообщений: 29
Но что можете предложить?
12 янв 12, 21:55    [11895814]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить