Создайте триггерный запрос SQL, чтобы сбросить все изменения столбцов в одну переменную - PullRequest
0 голосов
/ 08 января 2012

Для некоторого фона ... У меня есть коллекция таблиц, и я хотел бы триггер для каждой таблицы для INSERT, UPDATE, DELETE.Версия SQL Server - SQL 2005.

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

Это процесс, о котором я думал:

  1. Получить имена столбцов в таблице для sys.columns
  2. Создать динамический запрос sql SELECT на основеимена столбцов
  3. Выберите из Inserted
  4. для каждой строки в результатах, объедините значения столбцов в одну переменную
  5. Вставьте данные переменной в Detail столбец

Итак, вопросы:

Это лучший способ выполнить то, что я хочу сделать?И несколько более важный вопрос, как мне написать этот запрос?

1 Ответ

3 голосов
/ 08 января 2012

Вы можете использовать FOR XML для этого и просто сохранить результаты в виде XML-документа.

SELECT *
FROM Inserted
FOR XML RAW

даст вам attibute-ориентированный xml, а

SELECT *
FROM Inserted
FOR XML PATH('row')

даст вам элементно-ориентированный xml. Гораздо проще, чем пытаться определить столбцы и объединить их.

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