首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

存儲過程中 PRINT 陳述式導致用戶端異常關閉的排查記錄

     編輯:關於SqlServer

現象描述

同一支 VB/ADO 程式連接同一台 SQL Server,在開發筆電與伺服器上測試正常,但在客戶端部分聯想桌機上執行存儲過程特定分支時,視窗會無訊息自動關閉,無任何例外拋出。

排查過程

  1. 懷疑硬體/驅動問題,重灌作業系統、安裝 SP、裝 VS6 偵錯均無效。
  2. 發現修改存儲過程參數值(如 @CustType=0 改為 3)可避開問題,推測特定分支邏輯有問題。
  3. 細檢該分支程式碼,發現末尾有一行除錯用的 PRINT @SqlStr。
  4. 將該 PRINT 註解後,所有客戶端恢復正常。

根因分析

PRINT 訊息透過 TDS 封包以「資訊訊息」形式傳回用戶端。部分舊版 ODBC/OLE DB 驅動程式或特定硬體環境下,處理此類訊息時會觸發未處理的例外,導致宿主進程(如 VB 表單)意外終止,且不拋出可捕獲的錯誤。

解決方案與最佳實務

  • 生產環境嚴禁保留 PRINT/RAISERROR ... WITH NOWAIT 等除錯輸出。
  • 除錯資訊改寫入資料表或使用擴充事件。
  • 若需保留訊息,改用 sp_trace_generateevent 或自訂記錄表。

教訓

一行看似無害的 PRINT 耗費近一天排查時間。上線前務必清理所有除錯代碼,並建立 Code Review 機制攔截此類問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved