Как сбросить триггер SQL при создании в приложении логики после TRUNCATE TABLE? - PullRequest
0 голосов
/ 08 мая 2019

Как сбросить триггер SQL при создании в приложении логики после TRUNCATE TABLE?

У меня есть приложение базовой логики с триггером «Когда элемент создается» для таблицы SQL .

Вставка тестовых записей и все работает нормально.

Затем набрал TRUNCATE TABLE на тестовой таблице.

После этого триггер SQL логического приложения не будет работать , пока новая запись не будет иметь значение на IDENTITY выше, чем при последнем успешном запуске триггера SQL.

Как вы можете "сбросить систему" , чтобы триггер логического приложения видел все записи как новые после TRUNCATE TABLE?

И, насколько я понимаю, как триггер логического приложения на самом деле работает "под прикрытием"? ... Я думал, что это может быть триггер в таблице SQL, но проверил БД и не видит триггера

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Этот триггер на самом деле является заданием опроса, которое проверяет элементы с идентификатором, превышающим MAX (ID), обнаруженный при последнем запуске. Потеря записей является неотъемлемой проблемой опроса с использованием значения IDENTITY. На самом деле вы обнаружите, что кто-то спрашивает, почему этот метод опроса использовался в посте блога, в котором представлен SQL-коннектор

Повторная идентификация

Единственным решением при использовании IDENTITY является повторное заполнение значения IDENTITY с помощью:

DBCC CHECKIDENT ('Person.AddressType', RESEED, 10000);

Где 10000 - это число, превышающее максимальное значение IDENTITY, использованное перед усечением.

Более надежным решением было бы изменить реализацию опроса, чтобы обнаруживать и использовать SQL Server Отслеживание изменений . Обнаружение По какой-то причине это не было реализовано.

Использовать последовательности вместо IDENTITY

Другое решение заключается в использовании SEQUENCE вместо IDENTITY для создания новых идентификаторов. Последовательности являются независимыми объектами базы данных, поэтому усечение таблицы не повлияет на последовательность. Фактически, вы можете использовать одну и ту же ПОСЛЕДОВАТЕЛЬНОСТЬ по умолчанию для нескольких таблиц

Например, вы можете определить эту последовательность:

CREATE SEQUENCE MySequence
    START WITH 1  
    INCREMENT BY 1 ;

И использовать его как ограничение по умолчанию для первичного ключа:

CREATE TABLE MyTable 
(
   ID bigint PRIMARY KEY 
)

ALTER TABLE MyTable  
ADD   
    DEFAULT NEXT VALUE FOR MySequence 
    FOR ID;  
0 голосов
/ 08 мая 2019

Вам нужно полагаться на столбец метки времени / строки вместо столбца идентификаторов.Триггеры OnUpdate для таблиц, у которых нет столбца этого типа данных, не поддерживаются.

Соединитель SQL запрашивает изменение, когда в приложении логики установлен триггер «элемент создан».Он не создает триггер в базе данных SQL Azure.Соединитель SQL использует механизм опроса для запроса таблицы на предмет изменений с использованием столбца timestamp / rowversion.Этот тип данных специально разработан для такой обработки в SQL.Запрос опроса по существу выбирает все строки, где версия строки больше, чем последнее значение опроса.

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