CREATE TRIGGER [SchemaAuditDDLTrigger]
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS 
BEGIN
  -- Added by AutoAudit 
  -- www.SQLServerBible.com 
  -- Paul Nielsen 
  SET NoCount ON
  SET ARITHABORT ON
 
  DECLARE 
    @EventData XML,
    @Schema SYSNAME,
    @Object SYSNAME,
    @EventType SYSNAME,
    @SQL VARCHAR(max)
    
  SET @EventData = EventData()
  
  SET @Schema = @EventData.value('data(/EVENT_INSTANCE/SchemaName)[1]', 'VARCHAR(50)')
  SET @Object = @EventData.value('data(/EVENT_INSTANCE/ObjectName)[1]', 'VARCHAR(50)')
  SET @EventType = @EventData.value('data(/EVENT_INSTANCE/EventType)[1]', 'VARCHAR(50)')
  
  
  INSERT SchemaAudit (AuditDate, UserName, [Event], [Schema], Object, TSQL, [XMLEventData])
  SELECT 
    GetDate(),
    @EventData.value('data(/EVENT_INSTANCE/UserName)[1]', 'SYSNAME'),
    @EventType, @Schema, @Object,
    @EventData.value('data(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]', 'VARCHAR(max)'),
    @EventData
  
  IF @EventType = 'ALTER_TABLE'
     AND Exists(Select * 
                  from sys.objects o
                    join syscomments sc
                      on  o.object_id = sc.id  
                  where name = @Object + '_Audit_Insert'
                )
    BEGIN 
	
		declare @Text nvarchar(max) -- Since the comments are at the start of the procedure, this can probably be shortened from max
		declare @StrictUserContext bit
		declare @LogSQL bit
		declare @BaseTableDDL bit
		declare @LogInsert TINYINT

		set @Text = (Select [Text]
			from sys.objects o
			join syscomments sc
			on  o.object_id = sc.id  
			where name = @Object + '_Audit_Insert')

		IF (@Text is not null)
		BEGIN
			-- Get the values of the various options from the text using the default if nothing is found
			set @StrictUserContext = case when (@Text like '%StrictUserContext  :0%') then 0 else 1 end
			set @LogSQL =            case when (@Text like '%LogSQL             :1%') then 1 else 0 end
			set @BaseTableDDL =      case when (@Text like '%BaseTableDDL       :0%') then 0 else 1 end
			set @LogInsert =         case when (@Text like '%LogInsert          :0%') then 0 when (@Text like '%LogInsert          :2%') then 2 else 1 end

			SET @SQL = 'EXEC pAutoAudit ''' + @Schema + ''', ''' + @Object + ''', '
				+ '@StrictUserContext = ' + CAST(@StrictUserContext as CHAR(1)) + ', '
				+ '@LogSQL = ' + CAST(@LogSQL as CHAR(1)) + ', '
				+ '@BaseTableDDL = ' + CAST(@BaseTableDDL as CHAR(1)) + ', '
				+ '@LogInsert = ' + CAST(@LogInsert as CHAR(1))
			EXEC (@SQL)
		END
    END 
   
END   

go