用Query Analyzer查詢一個Table的Text欄位,發現筆數一多就會發生以下的錯誤
[Microsoft][ODBC SQL Server Driver]Unknown token received from SQL Server

[Microsoft][ODBC SQL Server Driver]Protocol error in TDS stream

這導致明明要查一百筆,有時傳回59筆,有時傳回92筆,有時則100筆都傳回。於是我在查詢欄位中加入了DataLength去檢查Text欄位的大小,發現發生錯誤時最後一筆的DataLength會暴增(如下圖,應為3178,卻得到813572)。

我用Terminal Service連上SQL 2000主機,用本機的Query Analyzer做同樣的查詢,就算查500筆也不會出錯。因此研判這個問題與網路傳輸有關!



與網路傳輸有關,那麼是Query Analyzer的Bug或是底層的Driver有問題? 試了一下SQL 2005 Database Management Studio,就算查500筆也不會出錯。所以網路傳輸的部分應是OK的。


用QueryAnalyzer查了另一個Table的Text欄位,發生一樣的狀況

 
【結論】
Query Analyzer在連線遠端SQL 2000資料庫,查詢大量含Text欄位的資料時,當結果資料長度超過一定大小時,就可能發生中途截斷的狀況,並得到
Unknown token received from SQL Server 或 Protocol error in TDS stream的錯誤訊息。

Comments

Be the first to post a comment

Post a comment