我的數據庫部分由外部CRM創建和編輯,其中某些表在其觸發器之後有多個(最多2個)。這是由於CRM自動生成了一個觸發器(我有限制的控制權),另一個觸發器包含我的代碼。Sqlserver標準觸發器訂單
CRM觸發器爲插入的數據行生成主鍵。我的觸發器需要訪問該主鍵,以便將其作爲外鍵寫入另一個表。我使用
Select @id=max(id) from mytable
因爲Scope_Identity沒有以某種方式產生想要的結果。
這工作,直到我讓CRM重新創建表和自己的觸發器。我的觸發器選擇的該表的最大ID似乎始終爲actual_id - 1。
當我改變我的觸發器使用相同的代碼它一直有程序再次工作。
我的問題是: SQL服務器(我正在使用SQL Server 2008)是否按創建時間設置其觸發器順序?
和: 是
sp_settriggerorder @triggername='mycustomtrigger', @order='Last', @stmttype='INSERT'
將永久地改變這個還是我必須再次調用該程序,每次CRM再現其觸發的時間? (使用DROP和CREATE,而不是ALTER)
希望這個答案能幫助有人看到同一個問題。
問候
對於任何多行語句,'select @ id = max(id)from mytable'中斷。爲什麼不在觸發器中使用'inserted'和'deleted'僞表? –