none
Erro nessa procedure. RRS feed

  • Pergunta

  • Criei esta procedure pra excluir informações de tabelas lincadas, fornecedor lincada em endereço, mais não tenho certeza se esta correto, tentei executá-la pelo aplicativo mas me retornou um erro dizendo que esta na procedure alguem podia me ajudar, segue a proedure e o erro.

    procedure:

    create procedure ApagarFornecedor
    	@Id int
    as
    	begin
    		delete from Fornecedor
    		from Fornecedor f inner join Endereco e
    		on f.End_Cod=e.End_Cod
    		where f.ID_Cad_Forn=@Id
            Select @Id as retorno
    end

    e o erro no aplicativo é esse.

    Alguem me ajuda Por favor

    quinta-feira, 29 de maio de 2014 05:06

Respostas

  • Achei estranho o código de o endereço estar no fornecedor, esta correto? A meu ver, o código do fornecedor e que deve estar na tabela de endereço, já que o fornecedor pode ter mais de um endereço e um endereço não pode ter mais de um fornecedor.

    Caso suas tabelas sejam da forma que você descreveu, e exista uma foreign key da tabela de endereço na tabela de fornecedor, tente a seguinte procedure:

    CREATE PROCEDURE ApagarFornecedor
    	@Id int
    AS
    	DECLARE @En_Cod INT
    	SELECT @En_Cod = End_Cod FROM Fornecedor
    	DELETE FROM Fornecedor WHERE ID_Cad_Forn=@Id
    	DELETE FROM Endereco WHERE End_Cod = @En_Cod 
    END 
    

    Mas caso seja da forma que acho que deveria ser, deveria ser o seguinte:

    CREATE PROCEDURE ApagarFornecedor
    	@Id int
    AS
    	DELETE FROM Endereco WHERE ID_Cad_Forn=@Id
    	DELETE FROM Fornecedor WHERE ID_Cad_Forn=@Id
    END 	
    



    Dasio Giovanni - Analista de Sistema

    • Marcado como Resposta Lucas .M sábado, 31 de maio de 2014 17:56
    quinta-feira, 29 de maio de 2014 11:20

Todas as Respostas

  • Lucas bom dia,

    A aplicação não está localizando a procedure, de uma olhada se ela foi criada na mesma base em que a aplicação está se conectando. Com a procedure parece estar tudo normal, é realmente uma questão de localização.

    Att.


    Guilherme Silva Cardoso

    quinta-feira, 29 de maio de 2014 11:18
  • Achei estranho o código de o endereço estar no fornecedor, esta correto? A meu ver, o código do fornecedor e que deve estar na tabela de endereço, já que o fornecedor pode ter mais de um endereço e um endereço não pode ter mais de um fornecedor.

    Caso suas tabelas sejam da forma que você descreveu, e exista uma foreign key da tabela de endereço na tabela de fornecedor, tente a seguinte procedure:

    CREATE PROCEDURE ApagarFornecedor
    	@Id int
    AS
    	DECLARE @En_Cod INT
    	SELECT @En_Cod = End_Cod FROM Fornecedor
    	DELETE FROM Fornecedor WHERE ID_Cad_Forn=@Id
    	DELETE FROM Endereco WHERE End_Cod = @En_Cod 
    END 
    

    Mas caso seja da forma que acho que deveria ser, deveria ser o seguinte:

    CREATE PROCEDURE ApagarFornecedor
    	@Id int
    AS
    	DELETE FROM Endereco WHERE ID_Cad_Forn=@Id
    	DELETE FROM Fornecedor WHERE ID_Cad_Forn=@Id
    END 	
    



    Dasio Giovanni - Analista de Sistema

    • Marcado como Resposta Lucas .M sábado, 31 de maio de 2014 17:56
    quinta-feira, 29 de maio de 2014 11:20
  • Lucas Bom Dia,

    É necessário verificar em qual banco de dados foi criada a procedure e para qual schema, ao realizar a chamada pela aplicação deverá passar o banco de dados que esta criada juntamente com o schema.

    Também é necessário verificar se o usuário da aplicação que esta conectando ao banco de dados e realizando a chamada da procedure, se possui permissão para executar esta procedure.

    Exemplo execução da procedure para outro banco:

    execute bancocriado.dbo.ApagarFornecedor

    Dando permissão para o usuário da aplicação:

    use bancocriado
    go
    
    grant execute on dbo.ApagarFornecedor to usuárioaplicação;

    Espero ter ajudado.


    Se a resposta foi útil marcar 'como resposta'.

    quinta-feira, 29 de maio de 2014 11:37