t-sql 中觸發器的 ORDER 放置
我正在使用 Sybase ASE 版本 16.0.0.1915(遵循 t-sql 語法)並嘗試創建一個新觸發器。此新觸發器模擬另一個現有觸發器,但稍作修改。修改現有觸發器以解決兩個“工作流程”會困難得多,因此復製到具有修改後的詳細資訊和“2”順序的新觸發器將是我的首選解決方案。
我正在閱讀文件,為了創建基於相同操作的新觸發器,我需要設置觸發器觸發的順序。如果未指定順序,則為其分配順序 0(第一個)。 文件
所以這是我的觸發器,現有的類似觸發器沒有訂單集。當我將“ORDER 2”放入創建語句時(在名稱之後,第 1 行中的“on”之前),我不斷收到語法錯誤 -131。
我還嘗試將“ORDER 2”放在表名之後、“for”之前、“insert”之後、“as”之前。都產生相同的錯誤-131。
那麼我做錯了什麼?此觸發器是否還有其他問題阻止我使用 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
名稱下有 4 種不同的 RDBMS產品
Sybase
…Adaptiver Server Enterprise (ASE)
、SQLAnywhere
和. 4x 產品不共享通用的 SQL 語言/語法。IQ``Advantage
該問題引用了 中的
create trigger
語法連結ASE
。問題中的範常式式碼似乎也適用於
ASE
.但是,從評論中我們發現 OP 實際上正在使用該
SQLAnywhere
產品(版本16.0.0.1915
)。雖然SQLAnywhere
確實為方言提供了一些半可行的支持ASE's
T-SQL
,但它不包括create trigger
命令的通用語法。從評論中:OP 找到了
SQLAnyhere's
創建觸發器命令的文件。使用該連結中的一個範例(向下滾動到 find
CREATE TRIGGER myTrig
),並修改 OP 的目前觸發程式碼以匹配文件,我認為 OP 正在尋找類似的東西:create trigger "DBA"."WKM_autoFillCL143" after insert order 4 on "DBA"."case_checklist" REFERENCING NEW AS inserted FOR EACH STATEMENT BEGIN ....
注意事項:
- 我主要工作
ASE
,而且我的SQLAnywhere
經驗相當有限,所以 OP 可能需要調整上述內容才能在SQLAnywhere
; 還 …- OP 應該檢查通過命令可用的各種選項
SQLAnywhere's
create trigger
(例如,觸發器應該在插入之前還是之後觸發?)- OP 將需要查看目前 (
ASE/T-SQL
) 觸發器程式碼的其餘部分,以查看哪些部分可以“按原樣”使用SQLAnywhere
,哪些部分需要重寫以匹配SQLAnywhere's
語法- OP 還希望驗證
SQLAnywhere's
對帶引號的標識符的支持(即,目前使用的雙引號標識符是否符合SQLAnywhere's
語法?)