Geração de sequenciais

15/01/2012

0

Boa noite Pessoal,
Atualmente estou migrando um banco de dados Firebird.. para SQLServer.
Tenho uma situacao que gostaria de uma orientacao, se possivel !...
la vai!!!

Veja:
TabelaXPTO
campo1 int - identity - PK
campo2 varchar(50)
campo3 datetime
campo4 ...
campo5 ...
campo6 int .. codigo da empresa - FK
campo7 int -- numero sequencial ( partindo do valor ex: 100 )

Preciso da seguinte Regra:
Para o COMPO7 preciso de um valor automatico sequencial que nao se repita por Empresa .

Exemplo sql:
Select MAX( campo7 )+ 1 from TABELAXPTO
Where
campo6 = :codigo da empresa X

( no Firebird utilizo o tal GENERATOR, onde é possivel criar varios AUTO Numeradores )
Importante: Esse numero nao sera atribuido para todos dos registros, ou seja nao posso usar o identity.

Solucoes!:??
Pensei em fazer um SELECT MAX + 1(utilizando trigger),
utilizando LOCK no registro ; mas nao foi uma solucao boa; esta gerando um Gargalo.....demora para incluir os registros..
sao muitas concorrencias. !!!!

Alguem tem alguma ideia de como posso trabalhar com esta situacao no SQLServer..
de uma forma segura.

Fagron Tech

Fagron Tech

Responder

Posts

16/01/2012

Marco Pinheiro

Tente assim:

SELECT CAMPO1, CAMPO2, CAMPO3, CAMPO4, CAMPO5, CAMPO6, ROW_NUMBER() OVER (PARTITION BY CAMPO6 ORDER BY CAMPO6), CAMPO7
FROM TABELA
Responder

10/02/2012

Decio Neto

ola tbm procuro uma solucao para este problema tenhu uma tabela de contadores e quando dou incluir as vezes 2 vendedores pegam o msm numero de pedido.


alguma ideia?

D7 banco sql server conexao bde

no datamodule tenhu uma table q pega o contador e passa pra o pedido...
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar