Журнал изменяется на таблицу базы данных с триггером

Вы можете сделать это через RemoveAll, используя Contains:

list.RemoveAll( item => !list2.Contains(item));

В качестве альтернативы, если вы просто хотите пересечение, используйте Enumerable.Intersect , который будет более эффективным:

list = list.Intersect(list2).ToList();

Разница в том, что в последнем случае вы не получите повторяющиеся записи. Например, если list2 содержит 2, в первом случае вы получите {2,2,4,5}, во втором - {2,4,5}.

9
задан Jason 22 May 2009 в 20:24
поделиться

7 ответов

Триггеры плохие, я бы держался подальше от триггеров.

Если вы пытаетесь что-то устранить, прикрепите Sql Profiler к база данных с конкретными условиями. Это будет регистрировать каждый выполненный запрос для вашей проверки.

Другой вариант - переключиться на вызывающую программу для регистрации своих запросов. Это очень распространенная практика.

Другой вариант - переключиться на вызывающую программу для регистрации своих запросов. Это очень распространенная практика.

Другой вариант - переключиться на вызывающую программу для регистрации своих запросов. Это очень распространенная практика.

1
ответ дан 4 December 2019 в 10:34
поделиться

Я большой поклонник руководства Питера Мишо о том, как он пишет виджеты javascript

Также полезны конфигурация сценария Кристиана Хейльмана и шаблон модуля

Это общие статьи по javascript, не относящиеся к одной библиотеке

Другие полезные приемы это такие вещи, как упаковка вашего кода в анонимную функцию, чтобы он не мешал другим глобальным библиотекам.

(function() {
    //Your code goes in here
})();

Что касается ошибок и передовых методов, у Джона Ресига есть интересная статья о javascript strict , которой еще нет, но у него есть полезная информация о том, чего вам следует избегать.

If you '

5
ответ дан 4 December 2019 в 10:34
поделиться

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

4
ответ дан 4 December 2019 в 10:34
поделиться

MSSQL имеет виртуальные таблицы с именами «Вставленные» и «Удаленные», которые содержат вновь вставленные и / или недавно удаленные и / или недавно обновленные записи данных, к которым можно получить доступ с помощью триггера. ... Я использую их, чтобы узнать, какие данные были изменены (вместо того, чтобы узнать, какой оператор изменил данные).

2
ответ дан 4 December 2019 в 10:34
поделиться

вам действительно нужно регистрировать выполненный оператор, большинство людей записывают измененные данные (таблицы INSERTED и DELETED в триггере).

1
ответ дан 4 December 2019 в 10:34
поделиться

Триггеры - хороший способ обеспечить регистрацию любых изменений, поскольку они почти всегда срабатывают независимо от того, как выполняются обновления - например, одноранговые соединения, а также соединения приложений.

Как было предложено @mwigdahl, представления управления системой выглядят как хороший способ зафиксировать текущий запущенный пакет. Другое дело, полезно ли входить в триггер.

Одним из недостатков использования триггеров является то, что вы можете определить источник обновления только по соединению с базой данных. Многие приложения не имеют никакой информации о пользователе, связанной с подключением, для облегчения пула подключений, поэтому вы не знаете, какой пользователь выполняет действие. т.е. логин, используемый соединением, является общим логином приложения, а не лицом, использующим приложение. Обычный способ обойти это - использовать хранимые процедуры в качестве интерфейса для всего взаимодействия с базой данных, а затем гарантировать, что UserId передается со всеми вызовами процедур. Затем вы можете вести журнал через хранимую процедуру вместо триггера. Ясно, что это полезно только в том случае, если вы знаете, что люди не будут обновлять таблицы напрямую, не используя процедуры, или не должны регистрировать эту ситуацию.

Возможность получить исполняемый в данный момент пакет может предоставить еще лучший механизм: если вы убедитесь, что все ваши пакеты sql содержат UserId, который затем можно извлечь из sql в вашем триггере. Это позволит вам вести журнал с помощью триггеров, что означает, что вы фиксируете все, но также позволяет вам связывать изменения с конкретным пользователем.

Если вы идете по маршруту триггеров, то это ' Стоит проверить, не срабатывают ли триггеры ситуаций (возможно, массовая загрузка данных? или есть ли у людей разрешение на отключение триггеров).

Также учтите, что @idstam указал, что код триггера будет внутри вашей транзакции, поэтому обычно будет регистрироваться и откатываться вместе с ним.

Еще одна вещь, которую следует учитывать при написании триггеров, - это поведение @@ IDENTITY : если у вас есть процедуры, использующие @@ IDENTITY, вы можете случайно изменить их поведение.

если у вас есть процедуры, использующие @@ IDENTITY, вы можете случайно изменить их поведение.

если у вас есть процедуры, использующие @@ IDENTITY, вы можете случайно изменить их поведение.

1
ответ дан 4 December 2019 в 10:34
поделиться

Будьте осторожны, поскольку триггеры срабатывают на уровне ROW, а не на уровне SQL STATEMENT. Итак, если кто-то выполняет команду «УДАЛИТЬ ИЗ БОЛЬШОЙ ТАБЛИЦЫ», ваш триггер сработает для каждой строки в этой таблице (особенно в связи с тем фактом, что вы хотите знать оператор SQL, выполнивший операцию, поэтому вам нужно «изобразить» что out "для каждой строки, на которую влияет оператор).

-4
ответ дан 4 December 2019 в 10:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: