Estou usando o Sybase ASE versão 16.0.0.1915, (segue a sintaxe t-sql) e tentando criar um novo trigger. Este novo gatilho emula outro gatilho existente, porém é ligeiramente modificado. Seria muito mais difícil modificar o gatilho existente para abordar os dois "fluxos de trabalho", portanto, copiar para um novo gatilho com detalhes modificados e uma ordem de "2" seria minha solução preferida.
Estou lendo nos documentos que, para criar um novo gatilho com base na mesma ação, preciso definir a ordem para que os gatilhos sejam disparados. Se nenhuma ordem for especificada, será atribuída a ordem de 0 (primeiro). Documentos
Então aqui está o meu gatilho, o gatilho semelhante existente não tem um conjunto de ordens. Quando coloco "ORDER 2" na instrução create (após o nome, antes de "on" na linha 1), continuo recebendo o erro de sintaxe -131.
Eu também tentei colocar o "ORDER 2" após o nome da tabela, antes de "for", e depois de "insert", antes de "as". Todos produzindo o mesmo erro -131.
Então o que estou fazendo de errado? Existe algum outro problema com esse gatilho me impedindo de usar a cláusula ORDER?
create trigger "DBA"."WKM_autoFillCL143" on
"DBA"."case_checklist" for insert
as
if((select top 1 "inserted"."code" from "inserted") in( '143' ) )
begin
declare @parentRef integer,@desc varchar(255),@desc1 varchar(255),@checkID integer
set @parentRef = (select top 1 "parent_ref" from "inserted")
if(@parentRef <> '0')
begin
set @desc = (select "description" from "case_checklist" where "checklist_id" = @parentRef)
if(@desc is not null)
begin
set @checkID = (select top 1 "checklist_id" from "inserted")
update "WKM_RecordChecklistMapping" set "c143" = @checkID where "c142" = @parentRef
declare @tabid integer
set @tabid = (select top 1 "tab_id" from "WKM_recordChecklistMapping" where "c142" = @parentRef)
set @tabid = (select top 1 "tab_id" from "user_tab2_data" where "tab_id" = @tabid)
if(@tabid is not null)
begin
declare @recProvider varchar(255),@recsRequested varchar(255),@dateFrom "datetime",@dateTo "datetime"
set @recProvider = (select top 1 "Provider_Name" from "user_tab2_data" where "tab_id" = @tabid)
set @recsRequested = (select top 1 "Records_Requested" from "user_tab2_data" where "tab_id" = @tabid)
set @dateFrom = (select top 1 "For_Dates_From" from "user_tab2_data" where "tab_id" = @tabid)
set @dateTo = (select top 1 "Through" from "user_tab2_data" where "tab_id" = @tabid)
set @desc1 = 'Receipt '+@recProvider+' Records? '+@recsRequested+', dates '+"coalesce"(convert(varchar(255),@dateFrom,1),'00/00/00')+' to '+"coalesce"(convert(varchar(255),@dateTo,1),'00/00/00')
set @checkID = (select top 1 "checklist_id" from "inserted")
update "case_checklist" set "description" = @desc1,"staff_assigned" = 'ZKS',"due_date" = ("today"()+7) where "checklist_id" = @checkID
end
end
end
end
Existem 4x produtos RDBMS diferentes sob o
Sybase
nome ...Adaptiver Server Enterprise (ASE)
,SQLAnywhere
e . Os produtos 4x não compartilham uma linguagem/sintaxe SQL comum.IQ
Advantage
A pergunta faz referência a um link para a
create trigger
sintaxe emASE
.O código de exemplo na pergunta também parece ser para
ASE
.No entanto, a partir dos comentários, descobrimos que o OP está realmente usando o
SQLAnywhere
produto (versão16.0.0.1915
). E emboraSQLAnywhere
forneça um suporte meio viável paraASE's
T-SQL
dialeto, ele não inclui uma sintaxe comum para ocreate trigger
comando.Dos comentários: OP localizou a documentação para o comando
SQLAnyhere's
create trigger .Usando um dos exemplos desse link (role para baixo para encontrar
CREATE TRIGGER myTrig
) e modificando o código de gatilho atual do OP para corresponder à documentação, estou pensando que o OP está procurando algo como:NOTAS :
ASE
, e minhaSQLAnywhere
experiência é bastante limitada, então o OP pode precisar ajustar o acima para funcionar corretamente noSQLAnywhere
; também ...SQLAnywhere's
create trigger
comando (por exemplo, o gatilho deve ser acionado antes ou depois da inserção?)ASE/T-SQL
código de gatilho atual ( ) para ver quais partes podem ser usadas 'como estão'SQLAnywhere
e quais partes precisarão ser reescritas para corresponder àSQLAnywhere's
sintaxeSQLAnywhere's
suporte para identificadores entre aspas (ou seja, o uso atual de identificadores com aspas duplas atende àSQLAnywhere's
sintaxe?)@mustaccio já respondeu sua pergunta nos comentários: coloque logo antes
AS
no topo do gatilho.Você tem um problema muito maior embora. Seu gatilho não lida com inserções de várias linhas. Precisa de uma reescrita completa. Espero ter acertado essas junções, pois não tenho seu modelo relacional completo:
Está
parent_ref <> '0'
correto? Parece que você realmente queria escreverparent_ref is not null
. De qualquer forma, espero que esta não seja uma coluna int que você esteja comparando com o texto.