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

Откуда:
Сообщений: 2649
Утром изменил в триггере

ALTER  TRIGGER Договор_ins
ON dbo.ДоговорКлиент
FOR INSERT
AS
IF @@ROWCOUNT>0
BEGIN
SET NOCOUNT ON 
		INSERT INTO log_base_sbyt(tabls,users,comp,oper,dat,id_tab,fields,new_val)
		SELECT 'Договор',SYSTEM_USER,host_name(),'INSERT',GETDATE(),inserted.Ndg,'Статус',inserted.Статус
		FROM inserted
		UNION ALL
...............................................

на

ALTER  TRIGGER Договор_ins
ON dbo.ДоговорКлиент
FOR INSERT
AS
SET NOCOUNT ON 
IF @@ROWCOUNT>0
BEGIN
		INSERT INTO log_base_sbyt(tabls,users,comp,oper,dat,id_tab,fields,new_val)
		SELECT 'Договор',SYSTEM_USER,host_name(),'INSERT',GETDATE(),inserted.Ndg,'Статус',inserted.Статус
		FROM inserted
		UNION ALL
...............................................

теперь он не работает и не пишет в таблицу log_base_sbyt. В чем может быть дело?

Заранее благодарен.
19 авг 09, 13:42    [7556237]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Glory
Member

Откуда:
Сообщений: 104760
vah


теперь он не работает и не пишет в таблицу log_base_sbyt. В чем может быть дело?


Дело в том, что изменили. Потому что менять нужно только тогда, когда знаешь, что меняешь
19 авг 09, 13:44    [7556250]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
vah
Member

Откуда:
Сообщений: 2649
Glory
vah


теперь он не работает и не пишет в таблицу log_base_sbyt. В чем может быть дело?


Дело в том, что изменили. Потому что менять нужно только тогда, когда знаешь, что меняешь



но ведь SET NOCOUNT ON
не влияет на @@ROWCOUNT. Я читал в мсдн, чесслово.
19 авг 09, 13:46    [7556270]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Glory
Member

Откуда:
Сообщений: 104760
vah
Glory
vah


теперь он не работает и не пишет в таблицу log_base_sbyt. В чем может быть дело?


Дело в том, что изменили. Потому что менять нужно только тогда, когда знаешь, что меняешь



но ведь SET NOCOUNT ON
не влияет на @@ROWCOUNT. Я читал в мсдн, чесслово.

И процитировать можете ?
19 авг 09, 13:48    [7556286]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
vah
Member

Откуда:
Сообщений: 2649
Glory
vah
Glory
vah


теперь он не работает и не пишет в таблицу log_base_sbyt. В чем может быть дело?


Дело в том, что изменили. Потому что менять нужно только тогда, когда знаешь, что меняешь



но ведь SET NOCOUNT ON
не влияет на @@ROWCOUNT. Я читал в мсдн, чесслово.

И процитировать можете ?


Функция @@ROWCOUNT обновляется, даже если значение SET NOCOUNT равно ON.
19 авг 09, 13:53    [7556316]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Glory
Member

Откуда:
Сообщений: 104760
vah


Функция @@ROWCOUNT обновляется, даже если значение SET NOCOUNT равно ON.

А самую первую строчку из описания @@ROWCOUNT вы не прочитали ?
19 авг 09, 13:56    [7556343]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
vah
Member

Откуда:
Сообщений: 2649
Glory
vah


Функция @@ROWCOUNT обновляется, даже если значение SET NOCOUNT равно ON.

А самую первую строчку из описания @@ROWCOUNT вы не прочитали ?


Может мне вообще убрать это?
IF @@ROWCOUNT>0
BEGIN
19 авг 09, 14:09    [7556435]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Glory
Member

Откуда:
Сообщений: 104760
vah
Glory
vah


Функция @@ROWCOUNT обновляется, даже если значение SET NOCOUNT равно ON.

А самую первую строчку из описания @@ROWCOUNT вы не прочитали ?


Может мне вообще убрать это?
IF @@ROWCOUNT>0
BEGIN

Лучше убрать руки от клавиатуры, если вы не понимаете, для чего был написан этот триггер
19 авг 09, 14:12    [7556455]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
vah
Member

Откуда:
Сообщений: 2649
Glory
vah
Glory
vah


Функция @@ROWCOUNT обновляется, даже если значение SET NOCOUNT равно ON.

А самую первую строчку из описания @@ROWCOUNT вы не прочитали ?


Может мне вообще убрать это?
IF @@ROWCOUNT>0
BEGIN

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


Для чего вы присутствуете на этом форуме?
19 авг 09, 14:13    [7556469]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Glory
Member

Откуда:
Сообщений: 104760
vah

Для чего вы присутствуете на этом форуме?

Чтобы таких как вы заставлять читать мануалы
19 авг 09, 14:15    [7556478]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
@@ROWCOUNT идет от последней операции. После ваших изменений последня операция стала Set nocount on
19 авг 09, 14:20    [7556526]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
vah
Member

Откуда:
Сообщений: 2649
Glory
vah

Для чего вы присутствуете на этом форуме?

Чтобы таких как вы заставлять читать мануалы


Это утопия.
19 авг 09, 14:21    [7556530]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
vah
Member

Откуда:
Сообщений: 2649
Deff
@@ROWCOUNT идет от последней операции. После ваших изменений последня операция стала Set nocount on


Спасибо, все понял.
19 авг 09, 14:22    [7556534]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Glory
Member

Откуда:
Сообщений: 104760
vah
Glory
vah

Для чего вы присутствуете на этом форуме?

Чтобы таких как вы заставлять читать мануалы


Это утопия.

Значит все ваши последующие подобные темы будут удаляться
19 авг 09, 14:23    [7556542]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
vah
Member

Откуда:
Сообщений: 2649
Glory
vah
Glory
vah

Для чего вы присутствуете на этом форуме?

Чтобы таких как вы заставлять читать мануалы


Это утопия.

Значит все ваши последующие подобные темы будут удаляться


Вот, хороший человек. И уложился в один топик. Дай ему Бог здоровья.

Deff
@@ROWCOUNT идет от последней операции. После ваших изменений последня операция стала Set nocount on
19 авг 09, 14:32    [7556628]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Glory
Member

Откуда:
Сообщений: 104760
vah

Вот, хороший человек. И уложился в один топик. Дай ему Бог здоровья.

Deff
@@ROWCOUNT идет от последней операции. После ваших изменений последня операция стала Set nocount on

А вам, что мешало прочитать эту же предложение в хелпе по @@ROWCOUNT ?
Вы уже не в состоянии даже первое предложение из хелпа осилить ?
19 авг 09, 14:39    [7556681]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31200
vah
Вот, хороший человек. И уложился в один топик. Дай ему Бог здоровья.
Так сложно было прочитать первую строчку описания @@ROWCOUNT ???

BOL
Возвращает число строк, затронутых при выполнении последней инструкции.
19 авг 09, 14:41    [7556701]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Сюдя по БОЛу триггер заведомо не правилен, если допустить что на таблице может появиться еще 1 триггер. Получается @@rowcount будет не со вставки в таблицу, а с другого триггера на этой таблице, который запустился до этого.
19 авг 09, 14:59    [7556860]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Glory
Member

Откуда:
Сообщений: 104760
Deff
Сюдя по БОЛу триггер заведомо не правилен, если допустить что на таблице может появиться еще 1 триггер. Получается @@rowcount будет не со вставки в таблицу, а с другого триггера на этой таблице, который запустился до этого.

И вы тоже не читаете БОЛ по всей видимости.
19 авг 09, 15:02    [7556893]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Glory
Deff
Сюдя по БОЛу триггер заведомо не правилен, если допустить что на таблице может появиться еще 1 триггер. Получается @@rowcount будет не со вставки в таблицу, а с другого триггера на этой таблице, который запустился до этого.

И вы тоже не читаете БОЛ по всей видимости.

Я как раз прочитал про @@rowcount, прежде чем запостить. Не увидел описания его особого поведения в начале триггера.
19 авг 09, 15:06    [7556936]     Ответить | Цитировать Сообщить модератору
 Re: Триггер  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Glory
Deff
Сюдя по БОЛу триггер заведомо не правилен, если допустить что на таблице может появиться еще 1 триггер. Получается @@rowcount будет не со вставки в таблицу, а с другого триггера на этой таблице, который запустился до этого.

И вы тоже не читаете БОЛ по всей видимости.
Конечно не читают. Так честно и сказали - утопия это.

Читаем тогда с экрана:
BOL: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ru/tsqlref9/html/f7e107f8-0fcf-408b-b30f-da2323eeb714.htm
  • Если инструкция SET запускается в хранимой процедуре или триггере, значение параметра инструкции SET восстанавливается после того, как управление вернется из хранимой процедуры или триггера. Также если инструкция SET указана в динамической строке SQL, которая выполняется с помощью процедуры sp_executesql или инструкции EXECUTE, значение параметра инструкции SET восстанавливается после того, как управление вернется из пакета, указанного в динамической строке SQL.

  • Хранимые процедуры выполняются с настройками SET, указанными во время выполнения, кроме инструкций SET ANSI_NULLS и SET QUOTED_IDENTIFIER. Хранимые процедуры, использующие инструкцию SET ANSI_NULLS или SET QUOTED_IDENTIFIER, используют настройку, указанную в хранимой процедуре во время создания. При использовании внутри хранимой процедуры любые установки SET игнорируются.
  • 19 авг 09, 15:11    [7556987]     Ответить | Цитировать Сообщить модератору
     Re: Триггер  [new]
    Deff
    Member

    Откуда: Пермь
    Сообщений: 18323
    Senya_L,
    Про set'ы все понятно. При чет тут функция @@RowCount?
    19 авг 09, 15:16    [7557029]     Ответить | Цитировать Сообщить модератору
     Re: Триггер  [new]
    Glory
    Member

    Откуда:
    Сообщений: 104760
    Deff
    Senya_L,
    Про set'ы все понятно. При чет тут функция @@RowCount?

    Читаем внимательно

    CREATE TRIGGER
    Creates a DML, DDL, or logon trigger. A trigger is a special kind of stored procedure that automatically executes when an event occurs in the database server.


    @@ROWCOUNT
    EXECUTE statements preserve the previous @@ROWCOUNT.

    Statements such as USE, SET <option>, DEALLOCATE CURSOR, CLOSE CURSOR, BEGIN TRANSACTION or COMMIT TRANSACTION reset the ROWCOUNT value to 0.
    19 авг 09, 15:21    [7557078]     Ответить | Цитировать Сообщить модератору
     Re: Триггер  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 46975
    Я проверял ситуацию с триггерами и @@ROWCOUNT на входе каждого из них.
    Как-то был топик на эту тему.
    Вывод: каждый триггер получает на входе одно и то же значение @@ROWCOUNT независимо от порядка вызовов триггеров.
    Это значение равно количеству записей, затронутых действием, вызвавшим триггер (DELETE, INSERT, UPDATE).

    P.S. Я не знаю где об этом сказано в BOL. Но мне и не надо. Хватило простенького (на три минуты) эксперимента, чтобы всё это выяснить.
    Советую почаще задавать вопросы самому серверу.
    19 авг 09, 15:45    [7557261]     Ответить | Цитировать Сообщить модератору
     Re: Триггер  [new]
    vah
    Member

    Откуда:
    Сообщений: 2649
    Можно не скромный вопрос... ? Из нижесказанного значит, что SET NOCOUNT ON нужно писать перед ALTER, или я опять не так понял?

    Senya_L
    Читаем тогда с экрана:
    BOL: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.ru/tsqlref9/html/f7e107f8-0fcf-408b-b30f-da2323eeb714.htm
  • Если инструкция SET запускается в хранимой процедуре или триггере, значение параметра инструкции SET восстанавливается после того, как управление вернется из хранимой процедуры или триггера. Также если инструкция SET указана в динамической строке SQL, которая выполняется с помощью процедуры sp_executesql или инструкции EXECUTE, значение параметра инструкции SET восстанавливается после того, как управление вернется из пакета, указанного в динамической строке SQL.

  • Хранимые процедуры выполняются с настройками SET, указанными во время выполнения, кроме инструкций SET ANSI_NULLS и SET QUOTED_IDENTIFIER. Хранимые процедуры, использующие инструкцию SET ANSI_NULLS или SET QUOTED_IDENTIFIER, используют настройку, указанную в хранимой процедуре во время создания. При использовании внутри хранимой процедуры любые установки SET игнорируются.
  • 20 авг 09, 10:27    [7559946]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить