Fonte: http://imasters.com.br/artigo/16639
– 1. Criar a Tabela
USE [nome-do-banco]
GO/****** Object: Table [dbo].[Trace_Alteracao_Objeto] Script Date: 04/08/2011 08:48:30 ******/
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GOSET ANSI_PADDING ON
GOCREATE TABLE [dbo].[Trace_Alteracao_Objeto](
[Id_Trace_Alteracao_Objeto] [int] IDENTITY(1,1) NOT NULL,
[Tp_Evento] [varchar](30) NULL,
[Dt_Alteracao] [datetime] NULL,
[Nm_Servidor] [varchar](20) NULL,
[Nm_Login] [varchar](50) NULL,
[Nm_Database] [varchar](20) NULL,
[Nm_Objeto] [varchar](50) NULL,
[Ds_Evento] [xml] NULL,
CONSTRAINT [PK_Trace_Alteracao_Objeto] PRIMARY KEY CLUSTERED
(
[Id_Trace_Alteracao_Objeto] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]GO
SET ANSI_PADDING OFF
GO
– 2. Criar a Procedure
USE [nome-do-banco]
GO/****** Object: DdlTrigger [trgTrace_Alteracao_Objeto] Script Date: 04/08/2011 08:47:30 ******/
SET ANSI_NULLS ON
GOSET QUOTED_IDENTIFIER ON
GOCREATE TRIGGER [trgTrace_Alteracao_Objeto] ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTSAS
BEGINSET NOCOUNT ON
DECLARE @Evento XML
SET @Evento = EVENTDATA()
INSERT INTO protesta.dbo.Trace_Alteracao_Objeto(Tp_Evento, Dt_Alteracao,
Nm_Servidor, Nm_Login, Nm_Database, Nm_Objeto,Ds_Evento)
SELECT @Evento.value(‘(/EVENT_INSTANCE/EventType/text())[1]‘,’varchar(50)’) Tipo_Evento,
@Evento.value(‘(/EVENT_INSTANCE/PostTime/text())[1]‘,’datetime’) PostTime,
@Evento.value(‘(/EVENT_INSTANCE/ServerName/text())[1]‘,’varchar(50)’) ServerName,
@Evento.value(‘(/EVENT_INSTANCE/LoginName/text())[1]‘,’varchar(50)’) LoginName,
@Evento.value(‘(/EVENT_INSTANCE/DatabaseName/text())[1]‘,’varchar(50)’) DatabaseName,
@Evento.value(‘(/EVENT_INSTANCE/ObjectName/text())[1]‘,’varchar(50)’) ObjectName, @Evento
END
GOSET ANSI_NULLS OFF
GOSET QUOTED_IDENTIFIER OFF
GODISABLE TRIGGER [trgTrace_Alteracao_Objeto] ON DATABASE
GOENABLE TRIGGER [trgTrace_Alteracao_Objeto] ON DATABASE
GO
– 3. Consultar a tabela
SELECT *
FROM Trace_Alteracao_Objeto WITH(NOLOCK)
WHERE Nm_Objeto = ‘Nome_Objeto’
ORDER BY Dt_Alteracao
– 4. Analisar o resultado:
Caso nenhum resultado seja retornado, esse objeto nunca foi alterado desde a implementação do Controle de Versão.
Depois de encontrada a versão desejada na tabela, para visualizar seu código basta clicar sobre a coluna Ds_Evento dessa linha. Uma nova janela é aberta com o código XML do evento que foi executado.
O código do objeto fica entre as tags <CommandText> e </CommandText> na mesma formatação utilizada na criação ou alteração do objeto.
Caso os objetos possuam os caracteres ’>’ e ’<’ em seu script, eles serão substituídos no campo XML pelas strings ’>’ e ’<’respectivamente. Logo, caso você precise subir uma versão antiga de um objeto que possua esses caracteres, deve ser realizado um replace no script do objeto como abaixo:
Copie o texto entre as tags <CommandText> </CommandText>.
Abra uma nova query e cole o texto.
Teche Ctrl+H e realize o replace de ’>’ por ’>’ de todo o texto.
Teche Ctrl+H e realize o replace de ’<’ por ’<’ de todo o texto.
Tecle F5 para subir o objeto.
– 5. Comemorar!
Implantei isso em um projeto e foi muito útil!
Khibyz says: Funcinou tudo direitinho. Vale um aumento de salário, não?



Se você tem problemas quando vai fazer upload de um arquivo grande no PHP e não consegue acessar as configurações do PHP “php.ini” de seu servidor, você tem uma alternativa que é usar um arquivo .htaccess.

