Array
(
)

Geração de sequenciais

Alternate Ltda
|
MVP
    15 jan 2012

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.

Marco Pinheiro
   - 16 jan 2012

Tente assim:

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

Décio
   - 10 fev 2012

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