SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
PRINT 'drop view dbo.udvTriggersDefinitions'
GO
if exists (select * from dbo.sysobjects
where id = object_id(N'dbo.udvTriggersDefinitions')
and OBJECTPROPERTY(id, N'IsView') = 1)
drop view dbo.udvTriggersDefinitions
GO
PRINT 'CREATE VIEW dbo.udvTriggersDefinitions'
GO
/******************************************************************************
NAME: dbo.udvTriggersDefinitions
PURPOSE:
REVISIONS:
$Log$
Ver Date Author Description
******************************************************************************/
create view dbo.udvTriggersDefinitions
as
 SELECT TOP 100 PERCENT T.name AS TableName
   ,COL_NAME(T.object_id,1) pkID
   ,0 fuCounter
   ,NULL definition
   ,NULL bgnText
   ,NULL endText
 FROM (SELECT *
   FROM sys.objects SOTR
   WHERE type_desc LIKE 'SQL_TRIGGER') AS TR
   RIGHT OUTER JOIN
    (SELECT *
    FROM sys.objects AS SOT
    WHERE (type_desc LIKE 'USER_TABLE')) AS T
    ON TR.parent_object_id = T.object_id
   LEFT OUTER JOIN
   (SELECT object_id, definition
    FROM sys.sql_modules
   ) AS TS
   ON TR.object_id = TS.object_id
   WHERE TR.name IS NULL
   AND T.name NOT IN('dtproperties','sysdiagrams')
   UNION
   SELECT TOP 100 PERCENT TableName
    ,COL_NAME(object_id,1) pkID
    ,SUM(Flag) fuCounter
    ,NULL definition
    ,NULL bgnText
    ,NULL endText
   FROM(SELECT T.name AS TableName
    , TS.definition
    ,(CASE WHEN TS.definition Like '%FOR UPDATE%' THEN 1
   ELSE 0 END) Flag
    ,T.object_id
   FROM (SELECT *
     FROM sys.objects SOTR
     WHERE type_desc LIKE 'SQL_TRIGGER') AS TR
   RIGHT OUTER JOIN (SELECT *
        FROM sys.objects AS SOT
        WHERE (type_desc LIKE 'USER_TABLE')) AS T
   ON TR.parent_object_id = T.object_id
   LEFT OUTER JOIN (SELECT object_id, definition
        FROM sys.sql_modules
       ) AS TS
   ON TR.object_id = TS.object_id
   WHERE TS.definition IS NOT NULL) T
   GROUP BY TableName
     ,object_id
   HAVING SUM(Flag) = 0
   UNION SELECT TOP 100 PERCENT T.name AS TableName
     ,COL_NAME(T.object_id,1) pkID
     ,1 fuCounter
     ,TS.definition
     ,REPLACE(SUBSTRING(TS.definition,1,LEN(TS.definition) - CHARINDEX('DNE', REVERSE(TS.definition)) + 1 - 3),'''','''''') bgnText
     ,SUBSTRING(TS.definition,LEN(TS.definition) - CHARINDEX('DNE', REVERSE(TS.definition)) + 1 + 3,LEN(TS.definition)) endText
     FROM (SELECT *
       FROM sys.objects SOTR
       WHERE type_desc LIKE 'SQL_TRIGGER') AS TR
     RIGHT OUTER JOIN (SELECT *
          FROM sys.objects AS SOT
     WHERE (type_desc LIKE 'USER_TABLE')) AS T
     ON TR.parent_object_id = T.object_id
   LEFT OUTER JOIN (SELECT object_id, definition
        FROM sys.sql_modules
       ) AS TS
     ON TR.object_id = TS.object_id
   WHERE TS.definition Like '%FOR UPDATE%'
   ORDER BY TableName
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
PRINT 'drop procedure dbo.udpUpdateAuditingFields'
GO
if exists (select * from dbo.sysobjects
where id = object_id(N'dbo.udpUpdateAuditingFields')
and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure dbo.udpUpdateAuditingFields
GO
PRINT 'CREATE PROC dbo.udpUpdateAuditingFields'
GO
/******************************************************************************
NAME: udpUpdateAuditingFields
PURPOSE:
REVISIONS:
$Log$
Ver Date Author Description
exec dbo.udpUpdateAuditingFields 'dbo.tblClients' --@TableName
 ,'test'  --@UserName
 ,'ClientID' --@ID_name
 ,5987   --@ID_value
*****************************************************************************/
CREATE PROC dbo.udpUpdateAuditingFields
 @TableName NVARCHAR(255)
 ,@UserName NVARCHAR(255)
 ,@ID_name NVARCHAR(255)
 ,@ID_value INT
AS
DECLARE  @Current_Date DATETIME
  ,@strSQL NVARCHAR(MAX)
BEGIN
 SET @Current_Date = getdate()
 SET @strSQL = 'UPDATE ' + @TableName
 SET @strSQL = @strSQL + ' SET ModifiedBy = ''' + @UserName
 SET @strSQL = @strSQL + ' '',ModifiedDate = ''' + CONVERT(NVARCHAR(30),@Current_Date)
 SET @strSQL = @strSQL + ''' WHERE '
 SET @strSQL = @strSQL + @ID_name + ' = ' + CONVERT(NVARCHAR(30),@ID_value)
 PRINT @strSQL
 EXEC(@strSQL)
 END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
DECLARE @schema nvarchar(255)
  ,@pkID nvarchar(255)
  ,@table_name nvarchar(255)
  ,@command NVARCHAR(4000)
  ,@definition NVARCHAR(4000)
  ,@fuCounter INT
  ,@bgnText nvarchar(3000);
 DECLARE crs CURSOR FOR
  SELECT   TableName
    ,pkID
    ,fuCounter
    ,[definition]
    ,bgnText
  FROM dbo.udvTriggersDefinitions
  OPEN crs
  FETCH NEXT FROM crs
  INTO @table_name
   ,@pkID
   ,@fuCounter
   ,@definition
   ,@bgnText;
  SET @Command = N'SET QUOTED_IDENTIFIER ON;'
  SET @Command = @Command + N' SET ANSI_NULLS ON;'
  SET @Command = @Command + N' DECLARE @strSQL NVARCHAR(4000)'
  SET @Command = @Command + N' ,@trgName NVARCHAR(255);'
  SET @Command = @Command + N' SET @trgName = ''dbo.T_' + @table_name + '_UTrig'';'
  SET @Command = @Command + N' PRINT ''DROP TRIGGER '' + @trgName;'
  SET @Command = @Command + N' IF OBJECT_ID (@trgName,''TR'') IS NOT NULL'
  SET @Command = @Command + N' BEGIN'
  SET @Command = @Command + N' SET @strSQL = ''DROP TRIGGER '' + @trgName;'
  SET @Command = @Command + N' EXEC(@strSQL);'
  SET @Command = @Command + N' END;'
  SET @Command = @Command + N' PRINT ''CREATE TRIGGER '' + @trgName;'
  SET @Command = @Command + N' /******************************************************************************'
  SET @Command = @Command + N' NAME: @trgName'
  SET @Command = @Command + N' PURPOSE: '
  SET @Command = @Command + N''
  SET @Command = @Command + N' REVISIONS:'
  SET @Command = @Command + N''
  SET @Command = @Command + N' $Log$'
  SET @Command = @Command + N''
  SET @Command = @Command + N' Ver Date Author Description'
  SET @Command = @Command + N' --------- ---------- --------------- ------------------------------------'
  SET @Command = @Command + N' ******************************************************************************/'
 IF @fuCounter = 0 BEGIN
   SET @Command = @Command + N' SET @strSQL = ''CREATE TRIGGER '' + @trgName'
   SET @Command = @Command + N' + '' ON '' + ''' + @table_name + ''
   SET @Command = @Command + N' FOR UPDATE'
   SET @Command = @Command + N' AS'
   SET @Command = @Command + N' BEGIN'
   SET @Command = @Command + N' DECLARE @ID_value INT'
   SET @Command = @Command + N' ,@USR NVARCHAR(255);'
   SET @Command = @Command + N' SELECT @ID_value = ' + @pkID + ' FROM Inserted;'
   SET @Command = @Command + N' EXEC dbo.udpUpdateAuditingFields ''''' +@table_name + ''''''
   SET @Command = @Command + N', @USR'
   SET @Command = @Command + N', ''''' + @pkID + ''''''
   SET @Command = @Command + N', @ID_value;'
   SET @Command = @Command + N' END'''
   SET @Command = @Command + N' EXEC(@strSQL);'
   END ELSE BEGIN
   SET @Command = @Command + N' SET @strSQL = ''' + @bgnText;
   SET @Command = @Command + N' BEGIN';
   SET @Command = @Command + N' DECLARE @ID_value INT'
   SET @Command = @Command + N' ,@USR NVARCHAR(255);'
   SET @Command = @Command + N' SELECT @ID_value = ' + @pkID + ' FROM Inserted;'
   SET @Command = @Command + N' EXEC dbo.udpUpdateAuditingFields ''''' +@table_name + ''''''
   SET @Command = @Command + N', @USR'
   SET @Command = @Command + N', ''''' + @pkID + ''''''
   SET @Command = @Command + N', @ID_value;'
   SET @Command = @Command + N' END; END'''
   SET @Command = @Command + N' EXEC(@strSQL);'
  END;
  SET @Command = @Command + N' SET QUOTED_IDENTIFIER OFF;'
  SET @Command = @Command + N' SET ANSI_NULLS ON;'
  WHILE @@FETCH_STATUS = 0
  BEGIN
  PRINT @Command;
  PRINT ''
  EXEC sp_executesql @Command;
  PRINT ''
  FETCH NEXT FROM crs
  INTO @table_name
   ,@pkID
   ,@fuCounter
   ,@definition
   ,@bgnText;
  SET @Command = N'SET QUOTED_IDENTIFIER ON;'
  SET @Command = @Command + N' SET ANSI_NULLS ON;'
  SET @Command = @Command + N' DECLARE @strSQL NVARCHAR(4000)'
  SET @Command = @Command + N' ,@trgName NVARCHAR(255);'
  SET @Command = @Command + N' SET @trgName = ''dbo.T_' + @table_name + '_UTrig'';'
  SET @Command = @Command + N' PRINT ''DROP TRIGGER '' + @trgName;'
  SET @Command = @Command + N' IF OBJECT_ID (@trgName,''TR'') IS NOT NULL'
  SET @Command = @Command + N' BEGIN'
  SET @Command = @Command + N' SET @strSQL = ''DROP TRIGGER '' + @trgName;'
  SET @Command = @Command + N' EXEC(@strSQL);'
  SET @Command = @Command + N' END;'
  SET @Command = @Command + N' PRINT ''CREATE TRIGGER '' + @trgName;'
  SET @Command = @Command + N' /******************************************************************************'
  SET @Command = @Command + N' NAME: @trgName'
  SET @Command = @Command + N' PURPOSE: '
  SET @Command = @Command + N''
  SET @Command = @Command + N' REVISIONS:'
  SET @Command = @Command + N''
  SET @Command = @Command + N' $Log$'
  SET @Command = @Command + N''
  SET @Command = @Command + N' Ver Date Author Description'
  SET @Command = @Command + N' --------- ---------- --------------- ------------------------------------'
  SET @Command = @Command + N' ******************************************************************************/'
  IF @fuCounter = 0 BEGIN
   SET @Command = @Command + N' SET @strSQL = ''CREATE TRIGGER '' + @trgName'
   SET @Command = @Command + N' + '' ON '' + ''' + @table_name + ''
   SET @Command = @Command + N' FOR UPDATE'
   SET @Command = @Command + N' AS'
   SET @Command = @Command + N' BEGIN'
   SET @Command = @Command + N' DECLARE @ID_value INT'
   SET @Command = @Command + N' ,@USR NVARCHAR(255);'
   SET @Command = @Command + N' SELECT @ID_value = ' + @pkID + ' FROM Inserted;'
   SET @Command = @Command + N' EXEC dbo.udpUpdateAuditingFields ''''' +@table_name + ''''''
   SET @Command = @Command + N', @USR'
   SET @Command = @Command + N', ''''' + @pkID + ''''''
   SET @Command = @Command + N', @ID_value;'
   SET @Command = @Command + N' END'''
   SET @Command = @Command + N' EXEC(@strSQL);'
   END ELSE BEGIN
   SET @Command = @Command + N' SET @strSQL = ''' + @bgnText;
   SET @Command = @Command + N' BEGIN';
   SET @Command = @Command + N' DECLARE @ID_value INT'
   SET @Command = @Command + N' ,@USR NVARCHAR(255);'
   SET @Command = @Command + N' SELECT @ID_value = ' + @pkID + ' FROM Inserted;'
   SET @Command = @Command + N' EXEC dbo.udpUpdateAuditingFields ''''' +@table_name + ''''''
   SET @Command = @Command + N', @USR'
   SET @Command = @Command + N', ''''' + @pkID + ''''''
   SET @Command = @Command + N', @ID_value;'
   SET @Command = @Command + N' END; END'''
   SET @Command = @Command + N' EXEC(@strSQL);'
  END;
  SET @Command = @Command + N' SET QUOTED_IDENTIFIER OFF;'
  SET @Command = @Command + N' SET ANSI_NULLS ON;'
 END;
 CLOSE crs;
 DEALLOCATE crs; 
If you find this script useful please donate generously.
 
No comments:
Post a Comment