Sign in with Microsoft
Sign in or create an account.
Hello,
Select a different account.
You have multiple accounts
Choose the account you want to sign in with.

徵狀

當 Microsoft SQL Server 重複執行執行下列作業的存儲程式時,可能會發生斷言錯誤:

  • 接受大型物件(例如 Varchar (max)Varbinary (max))作為引數,以及

  • 建立一個範圍符合程式執行的臨時資料表,並

  • 在臨時資料表中使用大型物件引數。

您可能會在 SQL Server 錯誤記錄中找到類似以下所示的斷言錯誤:

日期/時間 SPID錯誤:17065、嚴重性:16、狀態:1。

日期/時間 SPID SQL Server Assertion: File: FilePath \檔案名,line = LineNumber 失敗斷言 = ' fFalse ' 嘗試存取過期的 blob 控制碼(1)。 此錯誤可能是與時間有關的。 如果在重新執行語句後發生錯誤,請使用 DBCC CHECKDB 來檢查資料庫的結構完整性,或重新開機伺服器以確保記憶體中資料結構未損毀。

日期/時間 SPID錯誤:3624、嚴重性:20、State:1。

日期/時間 SPID系統斷言檢查失敗。如需詳細資訊,請參閱 SQL Server 錯誤記錄。通常,宣告失敗是由軟體錯誤或資料損毀所導致。若要檢查資料庫是否損毀,請考慮執行 DBCC CHECKDB。如果您同意在安裝期間將轉儲傳送至 Microsoft,則會將迷你轉儲傳送至 Microsoft。在最新的 Service Pack 中,或從技術支援取得的修補程式中,可能會有 Microsoft 的更新。

原因

SQL Server 有內部邏輯來停用參照大型物件的查詢的快取,因此後續的執行不會參照那些 Lob (這是在先前的執行期間建立的,因此不適用於後續的執行)。 該邏輯未處理 延遲名稱解析(DNR)在導致這些方案快取的臨時資料表上的情況。 已確定範圍的臨時資料表的建立成本很高,而且 SQL Server 會將它們緩存起來,以便在後續執行中重複使用 這可防止因架構變更而重新編譯這類查詢。

深入瞭解 延遲名稱解析

解決方案

此問題已在 SQL Server 的下列累積更新中修正:

       SQL Server 2016 SP1 的累積更新8  

       SQL Server 2017 的累積更新4

       SQL Server 2014 的累積更新 10 Service Pack 2

每個新的 SQL Server 累計更新都包含先前組建中的所有修復程式和安全性修正程式。 查看 SQL Server 的最新累計更新:

SQL Server 2016 的最新累計更新

SQL Server 2017 的最新累計更新

SQL Server 2014 的最新累計更新

狀態

Microsoft 已確認<適用於>一節中所列的 Microsoft 產品確實有上述問題。

參考

瞭解 Microsoft 用於描述軟體更新的 術語

Need more help?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?
By pressing submit, your feedback will be used to improve Microsoft products and services. Your IT admin will be able to collect this data. Privacy Statement.

Thank you for your feedback!

×