Usuário com melhor resposta
Como definir campo para NULL

Pergunta
-
Respostas
-
Oi Chapolin,
Só tem um detalhezinho. Do jeito que está, a trigger poderá gerar um erro de integridade se houver um relacionamento entre a tabela que tem a trigger e a tabela que terá seus registros atualizados. Nessa situação, pode ser necessário criar um trigger INSTEAD OF ao invés de um trigger comum.
[ ]s,
Gustavo
Todas as Respostas
-
Boa Tarde Vítor,
Cara, preciso que seja mais específico na sua dúvida. Existe relacionamento entre as tabelas? Se existe o campo não é uma chave estrangeira da outra coluna correto? Esse campo foi criado com um campo NULL, ou seja, permite valores nulos?? Como vc deseja fazer isso?? Por meio de uma procedure ou de uma Trigger?? Em termo de desempenho, aconselho ser um processo na procedure, porém não sei se é uma "exigência ser uma trigger".
Da uma explicadinha mais detalhada que posso te ajudar de uma forma mais clara..
Abraço,
chapolin.rio@gmail.com
-
Vitor,
Desculpe-me caso tenha recebido o meu post anterior, acabei me confundindo.
O que você poderia fazer é criar uma trigger for Delete, quando um registro for excluído é disparado um Update fazendo atualização no campo desejado.
Mas gostaria de obter mais informações sobre a sua estrutura de relacionamento?
Em relação a performance o trigger é executado como se fosse um bloco de transação que por padrão o SQL Server dispara assim que a operação ao qual o trigger esta associado é executado.
-
-
-
Blz Vitpr,
Meio caminho andando. Agora de que forma vc pretende fazer esse processo!?? Por meio de uma procedure, pode ser a mesma que faz a exclusão do registro em questão ou por uma Trigger?!? A questão de desempenho que comentei anteriormente a respeito da trigger é pq se for uma quantidade significativa de dados com processos o tempo todo o desempenho da trigger cairá em relação a uma procedure. Não seria um crime um trigger, mas se podemos ter um processo menos custoso acho que vale a pena ser levado em consideração. Galera, se estiver errado favor me corrigam!!!
Abraço
chapolin.rio@gmail.com
-
-
Olá Vitor,
Vi sua dúvida na outra comunidade e postei lá a resposta. Imaginei que a coluna a ser atualizada fosse FK e fiz via trigger e via constraint. Você pode adaptar os meus exemplos. Segue o trecho de código referente a trigger:
-- Cria as tabelas
CREATE
TABLE tbl1 (C1 INT PRIMARY KEY)CREATE
TABLE tbl2 (C2 INT PRIMARY KEY, C1 INT NULL,CONSTRAINT
FK FOREIGN KEY (C1) REFERENCES tbl1 (C1))GO
-- Cria a trigger
-- INSTEAD OF para não violar a FK
-- Se não houver FK, pode-se usar a trigger AFTER
CREATE
TRIGGER trg1 ON tbl1INSTEAD
OF DELETEAS
BEGIN
UPDATE tbl2 SET C1 = NULL WHERE C1 IN (SELECT C1 FROM DELETED) DELETE FROM tbl1 WHERE C1 IN (SELECT C1 FROM DELETED)END
GO
-- Insere registros em Tbl1 e Tbl2
INSERT
INTO Tbl1 VALUES (1)INSERT
INTO Tbl1 VALUES (2)INSERT
INTO Tbl2 VALUES (1,1)INSERT
INTO Tbl2 VALUES (2,1)INSERT
INTO Tbl2 VALUES (3,2)INSERT
INTO Tbl2 VALUES (4,2)-- Confere as tabelas
SELECT
* FROM Tbl1SELECT
* FROM Tbl2-- Delete um registro de Tbl1 para testar a trigger
DELETE
FROM Tbl1 WHERE C1 = 1-- Verifica se o registro foi excluído e se os registros em Tbl2 foram atualizados
SELECT
* FROM Tbl1SELECT
* FROM Tbl2-- Exclui as tabelas
DROP
TABLE Tbl2DROP
TABLE Tbl1[ ]s,
Gustavo
-
Vítor,
Abaixo um exemplo de uma trigger de delete. Repare na criação da trigger, ela é um FOR DELETE ou seja, sempre será chamada quando exisitr um deleção. repare que coloco a tabela referente ao processo.
Qualquer dúvida posta aí que ajudo...
Espero ter ajudado,
Abraço,
CREATE
TRIGGER [dbo].[TriggerDeletePlanejamento] ON [dbo].[sua_tabela_que_sofrera_a_deleção_do_registro]FOR
DELETEAS
DECLARE @DadosAntes AS VARCHAR (3500)--BUSCANDO INFORMAÇÕES DO INSERT
SELECT
@DadosAntes = CÓDIGO REFERENTE AO REGISTRO EXLUÍDO FROM DELETED (NOLOCK)--ATUALIZANDO TABELA PARA VALOR NULLO
UPDATE
TABELA_QUE_SERA_ATUALIZADASET
CAMPO_ATUALIZADO = NULLWHERE
CHAVE_ESTRANGEIRA = @DadosAntes -
Oi Chapolin,
Só tem um detalhezinho. Do jeito que está, a trigger poderá gerar um erro de integridade se houver um relacionamento entre a tabela que tem a trigger e a tabela que terá seus registros atualizados. Nessa situação, pode ser necessário criar um trigger INSTEAD OF ao invés de um trigger comum.
[ ]s,
Gustavo
-