Fórum Trigger Avançada! #220159

12/03/2004

0

Bem pessoal, é o seguinte:

Estou com uma aplicação WEB em Delphi que acessa os seguintes banco de dados: SQL-Server, Access e dBase.
A chave não é sequencial, ou seja, é gerada pelo sistema, obdecendo a seguinte regra:
É a quantidade de registros concatenado com os 2 ultimos digitos do ano, exemplo, 1 registro de 2004: 104

O problema é que o esta ocorrendo duplicação de chaves!!!!
Quando há muitas requisições, o Banco de dados gera chaves iguais!!
Pois até pegar o ultimo registro as outras requisições tambem pegam o número e acabam salvando com os mesmo numeros.

Gostaria de tentar resolver isso com Trigger, mas como eu pego o retorno de um Select dentro da Trigger?

CREATE TRIGGER GERA_NOS ON [OS]
FOR INSERT
AS
BEGIN
SELECT MAX(NOS) AS NEW_OS FROM OS
IF YEAR(NEW_OS) = YEAR(DATE)
UPDATE OS SET NOS=NEW_OS+100 WHERE NOS = 0
ELSE
UPDATE OS SET NOS=YEAR(DATE)+100 WHERE NOS = 0
END

Aceito sugestões e ajudas!

Obrigado.


Jack_loco

Jack_loco

Responder

Posts

12/03/2004

Wtjunior

Me caro Jack_loco

Uma trigger (gatilho) é utilizada para atualização de tabelas ...
after ou before (insert,update, delete)....
pelo que eu entendi vc teria que ter um sequence ou um generator e usar a trigger para pegar este valor....

wilson


Responder

Gostei + 0

17/03/2004

Jack_loco

Como faço para defini-la (TRIGGER) com ´AFTER´ ou ´BEFORE´???
Poderiam me dar um exemplo?

Valeu.

Na verdade eu queria um campo sequencial, e resolvi isso com a propriedade Identity do SQL-Server!


Responder

Gostei + 0

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

Aceitar