Trigger Avançada!
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.
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
Curtidas 0
Respostas
Wtjunior
12/03/2004
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
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
GOSTEI 0
Jack_loco
12/03/2004
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!
Poderiam me dar um exemplo?
Valeu.
Na verdade eu queria um campo sequencial, e resolvi isso com a propriedade Identity do SQL-Server!
GOSTEI 0