none
Problema com Insert verificando outras tabelas RRS feed

  • Pergunta

  • Tenho as seguintes tabelas: Pessoa(Pai), PessoaJuridica(Filha de Pessoa), PessoaFisica(Filha de Pessoa) e Cliente(Filha de Pessoa)

    Preciso fazer um Insert na tabela Cliente, mais precisa verificar se esse registro existe na tabela PessoaFisica ou Juridica, pois o Cliente so pode ser Fisica ou Juridica e nunca as duas.

    A PK de Pessoa é IdPessoa que é PK e FK nas outras tabelas. Tentei fazer da seguinte maneira:

    CREATE TRIGGER TG_Cliente_PF ON
    [dbo].[Cliente]
    AFTER INSERT 
    AS
    BEGIN
    
    	DECLARE @IdPessoa INT
    		
    	SELECT @IdPessoa = IdPessoa FROM INSERTED
    
    	IF NOT EXISTS(select * from inserted i inner join Pessoa p on i.IdPessoa = p.IdPessoa
    	inner join PessoaFisica pf on p.IdPessoa = pf.IdPessoa
    	where i.IdPessoa = @IdPessoa)
    		BEGIN
    			RAISERROR('NÃO EXISTE CADASTRO PESSOA FISÍCA',16,10)
    			ROLLBACK
    		END		
    END
    Mas ele sempre bloqueia se o registro não estiver em PessoaFisica, mesmo estando em juridica

    terça-feira, 17 de outubro de 2017 10:13

Respostas

  • Bom dia,

    Luciano, experimente fazer uns testes dessa forma:

    CREATE TRIGGER TG_Cliente_PF ON
    [dbo].[Cliente]
    AFTER INSERT 
    AS
    BEGIN
    	IF NOT EXISTS
    		(select 1 from inserted i 
    		 where
    			exists(select 1 from PessoaFisica pf where pf.IdPessoa = i.IdPessoa) or
    			exists(select 1 from PessoaJuridica pj where pj.IdPessoa = i.IdPessoa))
    		BEGIN
    			RAISERROR('NÃO EXISTE CADASTRO PESSOA FISÍCA',16,10)
    			ROLLBACK
    		END		
    END

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br


    • Editado gapimex terça-feira, 17 de outubro de 2017 11:19
    • Marcado como Resposta Luciano Magalhães terça-feira, 17 de outubro de 2017 11:41
    • Não Marcado como Resposta Luciano Magalhães terça-feira, 17 de outubro de 2017 17:15
    • Marcado como Resposta Luciano Magalhães terça-feira, 17 de outubro de 2017 17:16
    terça-feira, 17 de outubro de 2017 11:18

Todas as Respostas

  • Veja se isso atende?

    CREATE TRIGGER TG_Cliente_PF ON
    [dbo].[Cliente]
    AFTER INSERT 
    AS
    BEGIN
    
    	DECLARE @IdPessoa INT
    		
    	SELECT @IdPessoa = IdPessoa FROM INSERTED
    
    	IF NOT EXISTS(select 1 from inserted i 
    						inner join (select idpessoa from Pessoajuridica 
    									union 
    								    select idpessoa from PessoaFisica) pes on pes.IdPessoa = pf.IdPessoa)
    		BEGIN
    			RAISERROR('NÃO EXISTE CADASTRO PESSOA FISÍCA',16,10)
    			ROLLBACK
    		END		
    END


    Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)

    terça-feira, 17 de outubro de 2017 11:13
  • Bom dia,

    Luciano, experimente fazer uns testes dessa forma:

    CREATE TRIGGER TG_Cliente_PF ON
    [dbo].[Cliente]
    AFTER INSERT 
    AS
    BEGIN
    	IF NOT EXISTS
    		(select 1 from inserted i 
    		 where
    			exists(select 1 from PessoaFisica pf where pf.IdPessoa = i.IdPessoa) or
    			exists(select 1 from PessoaJuridica pj where pj.IdPessoa = i.IdPessoa))
    		BEGIN
    			RAISERROR('NÃO EXISTE CADASTRO PESSOA FISÍCA',16,10)
    			ROLLBACK
    		END		
    END

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br


    • Editado gapimex terça-feira, 17 de outubro de 2017 11:19
    • Marcado como Resposta Luciano Magalhães terça-feira, 17 de outubro de 2017 11:41
    • Não Marcado como Resposta Luciano Magalhães terça-feira, 17 de outubro de 2017 17:15
    • Marcado como Resposta Luciano Magalhães terça-feira, 17 de outubro de 2017 17:16
    terça-feira, 17 de outubro de 2017 11:18
  • Bom dia,

    Luciano, experimente fazer uns testes dessa forma:

    CREATE TRIGGER TG_Cliente_PF ON
    [dbo].[Cliente]
    AFTER INSERT 
    AS
    BEGIN
    	IF NOT EXISTS
    		(select 1 from inserted i 
    		 where
    			exists(select 1 from PessoaFisica pf where pf.IdPessoa = i.IdPessoa) or
    			exists(select 1 from PessoaJuridica pj where pj.IdPessoa = i.IdPessoa))
    		BEGIN
    			RAISERROR('NÃO EXISTE CADASTRO PESSOA FISÍCA',16,10)
    			ROLLBACK
    		END		
    END

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br



    Funcionou desta forma ajudou muito, obrigado
    terça-feira, 17 de outubro de 2017 11:41