ADO與SQL觸發器報錯的問題

 如果數據表使用級聯更新的觸發器,且記錄影響到多行時,在前臺修記錄錄有時會報“無法爲更新定位行,一些值可能已在最後一次讀取後已更改。”的錯誤,如果是在觸發器後才產生的此錯誤,則在觸發器里加上SET NOCOUNT ON即可。原因估計是,更新多行結果返回更新多行信息不是一行,而ado引擎便判斷錯誤。所以乾脆不允許出現任何返回。建議寫觸發器時都加上這句,少好多麻煩。
例如:

CREATE  TRIGGER TR_Depart_UpdateCode ON [dbo].[Depart] 
FOR UPDATE
AS
begin
  if Update(cCode) 
  begin
    SET NOCOUNT ON  --加上這句,前臺纔不會報錯,意思爲不返回更新記錄數
    declare @OldCode varchar(20),@NewCode varchar(20)
    Select @OldCode = cCode from Deleted
    Select @NewCode = cCode from Inserted

    --人員所屬部門
    Update Person Set cDepCode = @NewCode where cDepCode = @OldCode
  
    SET NOCOUNT OFF  --恢復默認值
  end

end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章