none
Problemas com código seqüêncial RRS feed

  • Pergunta

  • Boa Noite Senhores e Senhoras,

    Estou com um probleminha.

    eu tenho duas tabelas: uma para guardar informações sobre fornecedores e uma outra tabela para guardar endereços, não somente para os fornecedores como para outras entidades.

    então na tela para fazer o cadastro eu tenho as informações para o fornecedor e as informações para o endereço, mas na hora de fazer os inserts nas tabelas daria errado pq eu não teria o código do fornecedor pra jogar de chave estrangeira na tabela de endereços.

    A pergunta que vale um rodízio na Estrela do Sul é: Como eu faço para obter o código do fornecedor antes (de preferência no carregamento da página) de dar os inserts e ter a garantia que esse número não vai se repetir e dessa forma salvar informações do fornecedor e seu respectivo endereço? isso com a chave estrangeira bonitinha!

    Pessoal, muito obrigada pela atenção!
    Boa noite e abraços!
    quarta-feira, 12 de agosto de 2009 00:22

Respostas

  • Bom Dia Ailson!

    Graças a vc resolvi o meu probleminha hehehehe

    como estou utilizando o banco MySQL a solução fica dessa maneira:

    INSERT INTO foo (auto,text)
        VALUES(NULL,'text');         # generate ID by inserting NULL
    INSERT INTO foo2 (id,text)
        VALUES(LAST_INSERT_ID(),'text');  # use ID in second table

    Eu fiz o teste e funcionou direitinho!

    Muito agradecida pela sua ajuda.
    quarta-feira, 12 de agosto de 2009 12:21

Todas as Respostas

  • Ola Danielle boa noite,

    utilize proc
    a proc da um retorno
    dai você usa esse retorno

    http://www.google.com.br/search?hl=pt-BR&q=proc+sql+server&meta=

    bju
    té mais


    Leonardo B. Moreira - Web Developer .net with asp.net and C# - I know, it is only programming but I like it.
    • Sugerido como Resposta ch_an_70 quarta-feira, 12 de agosto de 2009 02:10
    quarta-feira, 12 de agosto de 2009 01:00
  • Boa noite,

    hum rodízio no estrela do sul então vejamos hehehe.

    Acho que no seu caso vc poderia realizar o insert do fornecedor, e com o SCOPE_IDENTITY retornar do banco o id do funcionário novo.
    Podendo assim utiliza-lo na tabela de endereços. Veja o exemplo abaixo, que deve servir somente como um exemplo visto que está com uma abordagem bem tosca mas acho que vai dar para ter uma idéia de como usar o  SCOPE_IDENTITY.

       
       SqlCommand comando = new SqlCommand();
       comando.CommandText = "INSERT INTO Tbl_Funcionario (Funcionario) VALUES ('Fulano de Tal'); Select Scope_identity() as id_funcionario;";
       comando.Connection = new SqlConnection(@"ConnectionString");
       comando.Connection.Open();
       int id_funcionario = Convert.ToInt32(comando.ExecuteScalar());
       comando.CommandText = "INSERT INTO Tbl_Endereco (id_Estrangeiro, Endereco) VALUES (" + id_funcionario + ", 'rua: teste n154')";
       comando.ExecuteNonQuery();
       comando.Connection.Close();


    Qualquer dúvida quanto ao uso do  SCOPE_IDENTITY só dar um toque.

    Abraços e boa sorte. 
    • Editado Ailson quarta-feira, 12 de agosto de 2009 01:34 Adicionando exemplo
    quarta-feira, 12 de agosto de 2009 01:08
  • Olá Ailson!

    ok... não sei usar esse scope_identity - Retorna o último valor de identidade inserido em uma coluna de identidade no mesmo escopo.

    mas a princípio não acho que vá resolver... se por uma catástrofe da natureza eu tiver dois inserts simultâneos?

    vc teria alguma outra dica? Lógico que vou pesquisar essa que vc passou!!!!

    Abraços e Obrigada!
    quarta-feira, 12 de agosto de 2009 01:32
  • Então Danielle não sou nenhum expert em Sql, mas pelo o que eu entendo como tudo é feito na mesma conexao aberta fica tudo dentro do mesmo escopo logo o SCOPE_IDENTITY irá retornar o identity somente desse escopo. Caso seja fechada a conexão e depois aberta outra daí sim o escopo foi perdido e não irá funcionar.
    Você pode ler mais aqui.

    Testa aí vê se te resolve. Servindo não esqueça de marcar como respondida e mandar meu vale rodízio hahahah.

    Abraços.
    quarta-feira, 12 de agosto de 2009 01:55
  • Bom Dia Ailson!

    Graças a vc resolvi o meu probleminha hehehehe

    como estou utilizando o banco MySQL a solução fica dessa maneira:

    INSERT INTO foo (auto,text)
        VALUES(NULL,'text');         # generate ID by inserting NULL
    INSERT INTO foo2 (id,text)
        VALUES(LAST_INSERT_ID(),'text');  # use ID in second table

    Eu fiz o teste e funcionou direitinho!

    Muito agradecida pela sua ajuda.
    quarta-feira, 12 de agosto de 2009 12:21
  • Hummm, não sabia que estava usando mySql.

    Bom que você encontrou sua solução.

    Abraços

    quarta-feira, 12 de agosto de 2009 15:29