傳遞到 SQL Server 的查詢已損壞

傳遞到 SQL Server 的查詢已損壞

我們在客戶站點的應用程式遇到了奇怪的錯誤。我們已設法將範圍縮小到僅使用 Management Studio 和 SQL Server 即可複製行為的程度。

我們有兩台機器,A 和 B:

+------------+ +--------------------+
| [一] | | [乙] |
|管理| --------------> | SQL Server 2008 R2 | SQL Server 2008 R2
|工作室 | |企業 x64 |
+------------+ +--------------------+

我們正在機器 A 上的 Management Studio 中針對機器 B 上的 SQL Server 執行個體執行 SQL 腳本。我們實際上並沒有執行腳本,只是解析它。

大多數時候,解析操作工作正常。有時(看似隨機),解析操作會因語法錯誤而失敗。錯誤訊息顯示腳本中出現錯誤的部分,該部分顯示為原始腳本中的某些 SQL,已被截斷並附加了隨機字元。

一個例子:

原來的SQL:

SELECT DISTINCT ST.TABLE_NAME as TableName
FROM INFORMATION_SCHEMA.TABLES AS ST
INNER JOIN INFORMATION_SCHEMA.COLUMNS AS SC
ON SC.TABLE_NAME = ST.TABLE_NAME
WHERE ST.TABLE_TYPE = 'BASE TABLE'
AND SC.COLUMN_NAME = 'Identity'
AND ST.TABLE_NAME != 'dtproperties'
ORDER BY ST.TABLE_NAME

錯誤的 SQL(由 SQL Server 報告):

SELECT DISTINCT ST.TABLE_NAME as TableName
FROM INFORMATION_SCHEMA.TABLES AS ST
INNER JOIN INFORMATION_SCHEMA.COLUMNS AS SC
ON SC.TABLE_NAME = Sā怊

上面的範例顯示了查詢是如何被損壞的。它並不總是發生,並且並不總是導致錯誤的 SQL 的同一位。針對另一個 SQL Server 執行個體解析此腳本不會產生任何錯誤,表示該腳本沒有問題。

出現某些東西正在破壞伺服器正在接收的 SQL。這讓我認為問題要么出在客戶端,要么出在客戶端到伺服器的 SQL 傳輸上。我有一個錯誤發生期間的 SQL 跟踪,它顯示 SQL Server 收到它時 SQL 已損壞。

我們無法追蹤此行為的任何可能原因,因此無法找到解決方案。由於錯誤看似隨機發生,因此產生重現步驟來提交錯誤報告也非常困難。

有任何想法嗎?

答案1

拉出 SQL Server。是時候進行徹底的系統檢查了。記憶體(電腦的內存,也可能是網卡的內存)可能是罪魁禍首。我希望看到記憶體錯誤出現。

相關內容