Как получить имена «только обновленных столбцов» в триггере? - PullRequest
0 голосов
/ 30 января 2019

Я хочу напечатать имена «только обновленных столбцов» из моего триггера.

Например, в моей таблице три столбца - ColA, ColB и ColC.

Если я обновляю только ColB, мой триггер должен печатать только ColB.

Если я обновляю только ColA & ColC, мой триггер должен печатать только ColA & ColC.

Могу ли язнаете, как добиться этого более коротким и понятным способом, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Этот сайт помог мне - https://ask.sqlservercentral.com/questions/44368/columns-updated-not-returning-the-column-name.html

create table Sample1
(
    a varchar(10),
    b varchar(10),
    c varchar(10)
);

alter trigger TR_Sample1_Update ON Sample1 for update as 
DECLARE @modifiedColumns nvarchar(max) 
SET @modifiedColumns = STUFF((SELECT ',' + name FROM sys.columns WHERE object_id = OBJECT_ID('Sample1') AND COLUMNS_UPDATED() & (POWER(2, column_id - 1)) <> 0 FOR XML PATH('')), 1, 1, '') 
PRINT @modifiedColumns
go

update Sample1 set a = 1 where a = 1
update Sample1 set b = 4 where a = 1
update Sample1 set c = 5 where a = 1
update Sample1 set a = 1, c = 5 where a = 1
update Sample1 set a = 1, b = 4, c = 5 where a = 1

Это сработало.Пожалуйста, попробуйте в LinqPad.

0 голосов
/ 30 января 2019

Лично я ненавижу триггеры и большую часть времени стараюсь их избегать; -)

Однако единственный известный мне способ - использовать функцию COLUMNS_UPDATED () внутри вашего кода триггера.Смотрите также примеры как: https://sites.google.com/site/bugsarewelcome/home/columns_updated

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...