簡體   English   中英

SQL Server的SET NOCOUNT ON的DB2等效項是什么?

[英]What is the DB2 equivalent of SQL Server's SET NOCOUNT ON?

SQL Server的SET NOCOUNT ON的DB2等效項是什么?

“從SQL Server文檔中:

SET NOCOUNT ON ...停止返回顯示受Transact-SQL語句或存儲過程影響的行數的消息作為結果集的一部分...

對於包含多個不返回大量實際數據的語句的存儲過程,或包含Transact-SQL循環的過程,將SET NOCOUNT設置為ON可以顯着提高性能,因為大大減少了網絡流量。”

我的問題是,如果我更新表中的一行,則會運行觸發器來更新另一張表中的另一行。

在Hibernate中,我收到此錯誤:“批處理更新從更新返回了意外的行數;實際行數:2;預期值:1”。

我認為由於觸發器DB2返回2而不是1,所以正確。 但是,有什么方法可以使DB2在不刪除觸發器的情況下返回1,或者可以禁用Hibernate中的檢查嗎? 該如何處理? 任何人都可以告訴db2中的“在SQL Server上設置NoCount on”嗎?

DB2中沒有等效於SET NOCOUNT ,因為DML語句成功完成后,DB2不會產生任何參考消息。 相反,DB2驅動程序將這種類型的信息存儲在稱為SQL通信區(SQLCA)的本地特定於連接的數據結構中。 在執行每個語句后,由應用程序(或應用程序使用的任何數據庫框架或API)決定要檢查哪些SQLCA變量。

在您的情況下,您的應用程序將其數據庫交互委托給了Hibernate,后者將DB2在SQLCA中報告的受影響的行數與Hibernate期望其UPDATE語句更改的行數進行比較。 由於Hibernate不知道您創建的AFTER UPDATE觸發器,因此它希望update語句僅影響一行,但是SQLCA顯示兩行已更新(其中一行由Hibernate的update語句,另一行由AFTER UPDATE觸發器對其進行影響)表),因此Hibernate拋出異常來抱怨差異。

這給您兩個選擇:

  1. 從該表中刪除觸發器,而是在Hibernate中定義一個等效的后續操作。 如果其他不使用Hibernate的應用程序也正在更新有問題的表,則這不是理想的解決方案,但這是團隊在將Hibernate施加到數據庫上時做出的那種決定。
  2. 將AFTER UPDATE觸發器保留在DB2中的位置,並檢查用於定義Hibernate對象映射的選項,以確定是否有辦法至少暫時禁用Hibernate的行數驗證邏輯。 看起來特別令人鼓舞的一種方法是將ResultCheckStyle.NONE選項指定為自定義@SQLUpdate批注的一部分

對於SQL Server和Sybase,似乎有第三個選項:通過在觸發器中激活SET NOCOUNT ON從Hibernate隱藏AFTER UPDATE觸發器的活動。 不幸的是,在DB2(或Oracle)中,沒有等效項允許應用程序在計算受影響的行數時有選擇地跳過某些活動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM