Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

WellingtonSilva

Solução para PK que ainda não existe no relacionamento

Recommended Posts

Amigos, preciso da ajuda de vocês novamente.

Pode até ser que eu mesmo esteja comendo bola nessa, mas vamos lá.

 

Eu tenho as seguintes tabelas no meu banco:

 

CADNOMES

IDNOME int PK

NOME varchar 60

 

ENDERECOS

IDENDERECO int PK (increment)

IDNOME int FK

IDTIPOEND int FK

IDLOGRA int FK

 

TIPOEND

IDTIPOEND int PK (increment)

TIPO varchar 20

 

LOGRA

IDLOGRA int PK (increment)

LOGRA varchar 100

BAIRRO varchar 50

CIDADE varchar 50

 

Vamos lá:

Vejam que a tabela NOME e a ENDERECOS são "ligadas" pelo IDNOME, por consequência a ENDERECOS tem as "ligações" IDTIPOEND e IDLOGRA.

 

Quando eu termino de preencher todos os campos na tela mando inserir no banco, a tabela TIPOEND já está populada com informações (Comercial, Residencial, etc.) portanto cada registro já possui ID, o problema é na LOGRA ela tem seu IDLOGRA como increment, ou seja, o mesmo só será criado após o INSERT correto? Então como vou ligar a tabela LOGRA com a ENDERECOS se na hora do insert eu ainda não tenho um ID? Ou seja, eu ainda não tenho o valor de IDLOGRA para gravar em ENDERECOS.IDLOGRA!!

 

PS.: Esta estrutura foi proposta pelo cliente, não posso alterar ele já criou a estrutura desta forma.

 

Abraços!!

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho que a TIPOEND já deveria estar com todos os campos preenchidos, deste modo, você nao tem INSERT nela.

Deste modo, vc teria insert somente na CADNOMES, ENDERECOS e LOGRA.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A.Jr,

 

A tabela TIPOEND já esta preenchida, meu problema não é com este relacionamento, e sim com a LOGRA ela tem seu IDLOGRA como increment, ou seja, o mesmo só será criado após o INSERT correto? Então como vou ligar a tabela LOGRA com a ENDERECOS se na hora do insert eu ainda não tenho um ID? Ou seja, eu ainda não tenho o valor de IDLOGRA para gravar emENDERECOS.IDLOGRA!!

 

Ou seja:

 

ENDERECOS.IDLOGRA com LOGRA.IDLOGRA

 

A LOGRA é preenchida pelo usuário e tenho que "ligá-la" à ENDERECOS.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

Seria algo assim:

declare @UltID int

insert into LOGRA (logra,bairro,cidade) values ('Minha Rua','Meu Bairro','Minha Cidade')

select @UltID = SCOPE_IDENTITY()

insert into ENDERECOS (idnome,idtipoend,idlogra) values (1,1,@UltID)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Creio que sim , não conheço detalhes de implementação do Sql Server mas a lógica básica é esta.

 

Insere Pai

Obter "chave"

Insere Filho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou testar aqui, porque tenho que colocar isso no código da linguagem que estou usando para este projeto e testar a partir desse código.

 

Amanhã eu retorno com o resultado.

 

Muito obrigado, grande abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pq nao poe tudo isso em uma proc... eu estou sem tempo para testar no meu ambiente, mas acho que por proc vc tem um controle maior desta sua transacao.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A.Jr,

 

Infelizmente o cliente não quer nada de código no banco.

 

Mas com o comando SCOPE_IDENTITY() que o MOTTA colocou, eu consegui criar um código dentro da aplicação que executa no banco exatamente na ordem em que consigo pegar o ID gerado e inserir na outra tabela.

 

Agradeço muito a ajuda dos amigos!

 

Grande abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

A.Jr,

 

Infelizmente o cliente não quer nada de código no banco.

 

Mas com o comando SCOPE_IDENTITY() que o MOTTA colocou, eu consegui criar um código dentro da aplicação que executa no banco exatamente na ordem em que consigo pegar o ID gerado e inserir na outra tabela.

 

Agradeço muito a ajuda dos amigos!

 

Grande abraço!

 

Isso as vezes me assusta.

Em muitos clientes que faço consultoria, o "cliente" vem com esta premissa. Um dos meus argumentos é:"Quem tem que trabalhar com os dados? O banco de DADOS ou a aplicacao?" Fora que qq manipulação em relacao a time-out vai estar na aplicacao. E a manutencao? Plano de tunning, estrutura de dados? Vai deixar a aplicação controlar?

 

Complicado, mas fazer oq... :coolio:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.