Inserções mutltiplas em sql

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
 
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.
 
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.
 
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.

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
 
Back
Topo