1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Inserções mutltiplas em sql

Discussão em 'Programação' iniciada por Galbne_PT, 30 de Maio de 2007. (Respostas: 3; Visualizações: 557)

  1. Galbne_PT

    Galbne_PT Power Member

    Olá pessoal,

    Venho pedir a vossa opinião sobre o seguinte problema:
    Tenho um base de dados em sql server, na qual tenho 3 tabelas (PC,Componentes,Componentes_PC)
    PC: Tabela com os computadores
    Componentes: Tabela com os componentes possíveis de um PC.
    Componentes_PC: Tabela que liga os componentes aos pc's. (com as respectivas foreing keys)

    Na introdução do pc tenho um form com uma grid view onde coloco os componentes do pc.

    A minha questão é: qual a maneira melhor de fazer para introduzir o novo pc com os componentes sem haver saltos na numeração?
    O que pensei foi algo do genero:
    1.Insiro em PC o novo pc, devolve o ID
    2.insiro em componentes_PC os componentes onde o ID_PC é o ID retornado em 1.
    3.Caso der algum erro apago em pc e componentes_pc as linhas em que o ID_PC é ID

    Agora imaginemos este cenario:
    Dois clientes concorrentes (chamamos '1' e '2'), o '1' e '2' inserem no formulario, em '1' o ID do PC é 5 e em '2' o ID é 6. Caso o '1' der erro vai ficar um salto se sequência da numeração.
    Como se pode resolver isso?

    Desde já obrigado
    Cumps
     
  2. podes usar a primitiva Identity torna sequencial o tipo a que está associado.

    Por exemplo:
    create table pc(
    codigo int identity prymary key,
    nome varchar(20)
    tamanho varchar(20)
    )

    e quando inseres coisas na tabela não precisas de lhe passar o código... ele gera-o automaticamente fazendo com que seja sequencial.

    fazes so:

    insert into pc values('my computer', 'portatil')


    Assim garantes sequencialidade.
     
  3. SoundSurfer

    SoundSurfer Power Member

    Podes fazer uma stored procedure... e lá dentro usar uma transacção.

    Se quiseres explorar um bocado mais, podes usar um ORM que te faça isso sozinho.
     
  4. Galbne_PT

    Galbne_PT Power Member

    A idenity uso na tabela pc e na tabela componentes, mas na tabela componentes_pc não posso usar pois trata-se de carnalidade n..n
    O problema é mesmo quando dá erro na inserção na tabela componentes_pc, tenho de fazer o roolback à transação. o Id gerado fica perdido pois entretanto já entrou um novo pc entre a criacao e o erro! ficando assim um numero não sequencial. :(


    Vou pesquisar ORM como o SoundSurfer disse....
    Cumps
     

Partilhar esta Página