Способ копирования содержимого строки в другую таблицу без необходимости вводить все столбцы в SQL Server - PullRequest
0 голосов
/ 26 декабря 2010

У меня есть таблица с некоторыми столбцами.Для архивных целей я обычно создаю вторую таблицу, которая выглядит точно так же, но я добавляю дополнительные Primary Key и Username/DateTime.После каждого редактирования я вызываю процедуру, которая выглядит примерно так:

CREATE PROCEDURE [dbo].[sto_archiwizujPodmiot]
    @varPodmiotID INT, @varUzytkownik NVARCHAR(50), @varUzytkownikData DATETIME
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

INSERT INTO [dbo].[PodmiotyHistoria]
           ([PodmiotID]
           ,[PodmiotOsobaNazwisko]
           ,[PodmiotOsobaImie]
           ,[PodmiotUzytkownik]
           ,[PodmiotUzytkownikData])
 SELECT [PodmiotID]
      ,[PodmiotOsobaNazwisko]
      ,[PodmiotOsobaImie]
      ,@varUzytkownik
      ,@varUzytkownikData
  FROM [dbo].[Podmioty]
WHERE [PodmiotID] = @varPodmiotID
END

Я создаю такую ​​процедуру для каждой таблицы, для которой мне нужен архив.Например, если кто-то собирается изменить некоторые поля до того, как произойдет обновление, я вызываю эту процедуру.Проблема в том, что это немного трудоемко, чтобы создать это для каждой таблицы, немного, но все же.Есть ли способ сделать более обобщенную процедуру, которая позволила бы мне сделать то же самое, но я мог бы вызвать ее для каждой таблицы, просто задав такие параметры, как TableName, ArchiveTableName, Username, DateTimeдолжен делать каждый раз?

1 Ответ

2 голосов
/ 26 декабря 2010

Аудит таблиц таким способом лучше всего выполнять с помощью триггеров .

Вам все еще нужно создать триггер для каждой такой таблицы.

Я обнаружил следующую статью , в которой есть сценарии, которые автоматически генерируют код триггера для предоставленной таблицы / таблиц.

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