Usuário com melhor resposta
Delet em tabela com Trigger

Pergunta
-
Boa tarde gente...
Tenho uma tabela de saldo que possue a seguinte estrutura em SQL 2000
USID int 4
Saldo float 8
Data datetime 8
A tabela possui a seguinte Trigger:
CREATE TRIGGER tg_CheckDEL_SaldoZero ON [dbo].[RANCHO_CartaoSaldo]
INSTEAD OF DELETEAS BEGIN
declare @Logcomp varchar(60)
set @Logcomp = (select 'RE:' + CAST(USID as varchar(15)) + ' Saldo:' + CAST(Saldo as varchar(8)) + ' DT:' + CONVERT(varchar(30), Data, 120) from deleted)
INSERT INTO TABLOG_Ranc (LOGDt, LOGUsId, LOGTip, LOGComp, LOGIP)
VALUES (getdate(),1,251, @Logcomp,'SQLSERVER ALERT')END
Bom..o problema seria o seguinte....segundo minha trigger, não seria possível efetuar nenhum delete e sim um insert em outra tabela de log. Porém, aleatóriamente uma série de registros somem da tabela ao mesmo tempo...sempre são os TOP que somem....alguém tem ideia do que pode ocorrer para que haja o delete dos dados? serial algum problema com o update? em alguma situação o update poderia travar e ocasionar o delete dos registros?
Tem algum código ao qual eu possa acompanhar o que está sendo deletado em tempo real? log? ou outra maneira de acompanhar isto?? e quem está fazendo este delete? Existe alguma maneira de verificar esse delete no Transaction Log?
No aguardo,
Respostas
-
Boa Tarde,
Não há como diferenciar a origem do DELETE dentro da trigger (a não ser que você trabalhe com algum sinal, mas isso irá exigir algum nível de recodificação). Se você necessita dessa informação, só mesmo com o Profiler ou uma ferramenta de leitura de log como o Log Explorer ou o Log Rescue.
O problema é que deixar um Profiler eterno é dispendioso e adquirir uma ferramenta de terceiro é mais um custo de licenciamento. Em todo caso, alguns custos valem a pena (principalmente se registros estão desaparecendo).
[ ]s,
Gustavo
Todas as Respostas
-
cara da uma olhada
Create Table Exemplo (Campo int)
Create Table Exemplo_Log (Campo int)create trigger NoDelete on Exemplo
Instead Of Delete
as
Insert into Exemplo_Log (campo)
Select campo from Deleted
insert into Exemplo (campo) Values (1)
insert into Exemplo (campo) Values (2)
insert into Exemplo (campo) Values (3)
delete from Exemplo where campo = 2Select * From Exemplo
nao deveria estar deletando nao, a menos que alguem use
alter table exemplo disable triggers all -- ou nome da trigger
mais tem um erro na sua trigger tambem, se for feito um delete de mais de uma linha so vai logar 1 linha na sua tabela de log, use sempre um insert de um select concatenando os dados como se fosse um select para direcionar para sua tabela de log.
Abs;
-
Edgar,
Você poderia utilizar a ferramenta SQL Profiler, para fazer o monitoramento on-line do seu servidor SQL Server, mas neste caso você vai verificar o que esta sendo processado, agora se você deseja verificar quais dados estão sendo excluídos, seria outra situação.
-
-
Boa Tarde,
Não há como diferenciar a origem do DELETE dentro da trigger (a não ser que você trabalhe com algum sinal, mas isso irá exigir algum nível de recodificação). Se você necessita dessa informação, só mesmo com o Profiler ou uma ferramenta de leitura de log como o Log Explorer ou o Log Rescue.
O problema é que deixar um Profiler eterno é dispendioso e adquirir uma ferramenta de terceiro é mais um custo de licenciamento. Em todo caso, alguns custos valem a pena (principalmente se registros estão desaparecendo).
[ ]s,
Gustavo