OK – not too complex this but quick and easy.
Firstly I create a history table – to do this I get SQL management studio to generate a create script for the table I want to audit. I add the postscript “History” to the table name, remove the constraints and indexes and add in 2 extra columns, one for the type of update and one for the date/time e.g.
CREATE TABLE [dbo].[tblProductCodeHistory] 
( 
    chrChangeType nchar(1) NOT NULL, 
    dteChangeTime DateTime NOT NULL, 
    [intProductId] [int]  NOT NULL, 
    [intSalesAccountId] [int] NOT NULL, 
    [intSalesTaxCodeId] [int] NOT NULL, 
    [vcrDescription] [nvarchar](100) NULL, 
    [intBusinessId] [int] NOT NULL, 
    [decNetPrice] [money] NULL, 
    [vcrProductCode] [nvarchar](100) NOT NULL, 
    [decCost] [money] NULL, 
    [intSupplierAccountId] [int] NULL, 
    [intProductTypeId] [int] NOT NULL, 
    [intQuantity] [decimal](10, 3) NOT NULL , 
    [intUserId] [int] NULL, 
    [dteUpdated] [datetime] NULL, 
    [vcrUnit] [dbo].[ShortString] NULL DEFAULT (NULL), 
) ON [PRIMARY] 
GO
Then I create a couple of triggers on the original table as follows -
CREATE TRIGGER [dbo].[ProductCode_Delete] 
   ON  [dbo].[tblProductCode] 
   AFTER DELETE 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 
    INSERT INTO tblProductCodeHistory 
SELECT 'D',GetDate(),* FROM deleted 
    -- Insert statements for trigger here 
END
GO 
/****** Object:  Trigger [dbo].[Transaction_Update]    Script Date: 08/11/2009 16:54:16 ******/ 
CREATE TRIGGER [dbo].[ProductCode_Update] 
   ON  [dbo].[tblProductCode] 
   AFTER UPDATE 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 
    INSERT INTO tblProductCodeHistory 
SELECT 'U',GetDate(),* FROM deleted 
    -- Insert statements for trigger here 
END
Once you’ve done this once then just do a search and replace to create the next set of trigger e.g. replace ProductCode in the above script with MyTable.
One thing to bear in mind is if you have a username in the original table then you might want to update this as part of the delete stored proc so the last username gets in the history table.
A colleague of mine has been promising to create a script to create this off the sysobjects – but I’m not holding my breath!
 
No comments:
Post a Comment