Установка noucount on приводит к тому, что не выводится количество обработанных командами T-SQL строк
*/
Set nocount on
Declare
@var int
set @var = (select [object_id] from sys.objects where name = 'trig3'
and TYPE = 'TR'
and schema_id = (select schema_id from sys.schemas
where name = 'dbo')
)
if (TRIGGER_NESTLEVEL(@var, 'IOT', 'DML') = 1)
Begin
Declare
@count1 int,
@count2 int,
@count3 int,
@col_upd varbinary(128)
set @count1 = (select count(*) from table1)
set @count2 = (select count(*) from inserted)
set @count3 = (select count(*) from deleted)
set @col_upd = columns_updated()
if (@col_upd != 0)
Begin
if (@count2 = @count3)
Begin
-- Случай, когда триггер активирован командой UPDATE
Declare
@col_name varchar(128),
@table_id int,
@col_id int,
@is_iden bit,
@is_comp bit,
@type_id tinyint,
@type_name sysname
-- получаем идентификатор таблицы table1 из системеного представления sys.objects
set @table_id = (select [object_id] from sys.objects where
name = 'table1' and type = 'U' and
schema_id = (select [schema_id]
from sys.schemas where name = 'dbo')
)
set @col_id = 0
/*
При использовании команды EXECUTE нельзя обращаться к таблице inserted, поэтому копируем ее содержимое во временную таблицу
*/
select * into #temp_ins from inserted
-- отключаем срабатывание триггера trig3
Alter table table1 disable trigger trig3
-- запускаем цикл по тем столбцам, значения которых изменялись
while (@col_upd <> 0)
Begin
-- получаем текущий номер столбца по порядку от начала таблицы
set @col_id = @col_id + 1
if ((@col_upd & 1) = 1)
Begin
-- если этот столбец подвергался изменению
/*
Получаем название этого столбца, информацию о том имеет ли он свойство identity или является ли он вычисляемым или имеет ли он свойство identity, и идентификатор системного типа данных для этого столбца