none
Stored Procedure p/ verificar se existe o valor na base de dados RRS feed

  • Pergunta

  • ola,

    estou implementando uma parte onde vou inserir dados numa base de dados. isso é feito através de SP.

    mas antes gostaria de criar um SP que vai verificar na minha BD, na tabela que eu pretendo inserir, se os dados já estão nessa tabela. se sim, não me deixa inserir novamente esses dados, e caso não existirem na tabela, entao consigo inserir os dados... alguma dica???

    terça-feira, 23 de abril de 2013 10:11

Respostas

  • fabio,

    tenho uma tabela produto que tem (id_produto (autoicrement), nome_produto, preço)

    gostaria de verificar pelo nome e pelo preço. caso existir retornaria uma msg para o utilizador alertando de que o produto ja existe na bd, e caso não, efectuaria a inserção normal.

    um exemplo pratico?

    CREATE PROCEDURE insereProduto
    @nome_produto varchar(100),
    @preco decimal(18,2)
    
    AS
    DECLARE @existe int
    SET @existe = 0
    BEGIN
    
    select id_produto from produto where nome_produto = @nome_produto and preco = @preco
    if @@RowCount <> 0 SET @existe = 1
    
    if(@existe = 0)
    	BEGIN
    		INSERT INTO produto(nome_produto, preco)	
    		VALUES(@nome_produto, @preco)
    	END
    END

    Aí está sua procedure, fiz de forma bem didática para saber o que está acontecendo.

    Se ajudou, por favor, clique em marcar como resposta e ajude o fórum.


    Evandro Aguiar
    http://agenciawebpro.com.br

    Farei o possível, para ajudar. Caso eu consiga, marque minha resposta como útil e me faça feliz. :) hauhauhauhauh

    • Sugerido como Resposta EvandroAS terça-feira, 23 de abril de 2013 13:06
    • Marcado como Resposta flaviodantas quarta-feira, 24 de abril de 2013 12:28
    terça-feira, 23 de abril de 2013 13:06
  • Complementando a resposta do Evandro, adicionei um parametro output:

    CREATE PROCEDURE insereProduto
    @nome_produto varchar(100),
    @preco decimal(18,2),
    @mensagemDeErro varchar(500) out
    
    AS
    DECLARE @existe int
    SET @existe = 0
    BEGIN
    
    select id_produto from produto where nome_produto = @nome_produto and preco = @preco
    if @@RowCount <> 0 SET @existe = 1
    
    if(@existe = 0)
    	BEGIN
    		INSERT INTO produto(nome_produto, preco)	
    		VALUES(@nome_produto, @preco)
    	END
    ELSE
    	BEGIN
    		SET @mensagemDeErro = 'Produto já existe'
    	END
    END
    Após você rodar a procedure por programação, a variável que representa o parâmetro @mensagemdeerro estará preenchida (caso der erro).


    Ao infinito e além!

    • Marcado como Resposta flaviodantas quarta-feira, 24 de abril de 2013 12:28
    quarta-feira, 24 de abril de 2013 12:20

Todas as Respostas

  • Você pode fazer um IF dentro da própria procedure. Após o resultado do IF você decide se quer inserir ou não.

    Ao infinito e além!

    terça-feira, 23 de abril de 2013 12:02
  • fabio,

    tenho uma tabela produto que tem (id_produto (autoicrement), nome_produto, preço)

    gostaria de verificar pelo nome e pelo preço. caso existir retornaria uma msg para o utilizador alertando de que o produto ja existe na bd, e caso não, efectuaria a inserção normal.

    um exemplo pratico?

    terça-feira, 23 de abril de 2013 12:08
  • fabio,

    tenho uma tabela produto que tem (id_produto (autoicrement), nome_produto, preço)

    gostaria de verificar pelo nome e pelo preço. caso existir retornaria uma msg para o utilizador alertando de que o produto ja existe na bd, e caso não, efectuaria a inserção normal.

    um exemplo pratico?

    CREATE PROCEDURE insereProduto
    @nome_produto varchar(100),
    @preco decimal(18,2)
    
    AS
    DECLARE @existe int
    SET @existe = 0
    BEGIN
    
    select id_produto from produto where nome_produto = @nome_produto and preco = @preco
    if @@RowCount <> 0 SET @existe = 1
    
    if(@existe = 0)
    	BEGIN
    		INSERT INTO produto(nome_produto, preco)	
    		VALUES(@nome_produto, @preco)
    	END
    END

    Aí está sua procedure, fiz de forma bem didática para saber o que está acontecendo.

    Se ajudou, por favor, clique em marcar como resposta e ajude o fórum.


    Evandro Aguiar
    http://agenciawebpro.com.br

    Farei o possível, para ajudar. Caso eu consiga, marque minha resposta como útil e me faça feliz. :) hauhauhauhauh

    • Sugerido como Resposta EvandroAS terça-feira, 23 de abril de 2013 13:06
    • Marcado como Resposta flaviodantas quarta-feira, 24 de abril de 2013 12:28
    terça-feira, 23 de abril de 2013 13:06
  • Complementando a resposta do Evandro, adicionei um parametro output:

    CREATE PROCEDURE insereProduto
    @nome_produto varchar(100),
    @preco decimal(18,2),
    @mensagemDeErro varchar(500) out
    
    AS
    DECLARE @existe int
    SET @existe = 0
    BEGIN
    
    select id_produto from produto where nome_produto = @nome_produto and preco = @preco
    if @@RowCount <> 0 SET @existe = 1
    
    if(@existe = 0)
    	BEGIN
    		INSERT INTO produto(nome_produto, preco)	
    		VALUES(@nome_produto, @preco)
    	END
    ELSE
    	BEGIN
    		SET @mensagemDeErro = 'Produto já existe'
    	END
    END
    Após você rodar a procedure por programação, a variável que representa o parâmetro @mensagemdeerro estará preenchida (caso der erro).


    Ao infinito e além!

    • Marcado como Resposta flaviodantas quarta-feira, 24 de abril de 2013 12:28
    quarta-feira, 24 de abril de 2013 12:20
  • muito obrigada pela ajuda Evandro e Fabio. ainda nao testei o codigo, mas ja entendi como funciona e é exatamente isso que necessito.. agradeço muito pela ajuda mesmo.
    quarta-feira, 24 de abril de 2013 12:28