KB4046918 - 修正:在 SQL Server 2016 和 2017 中,當 SQL CLR 函式透過模擬呼叫叫用 Transact-SQL 陳述式時,執行失敗

套用到
SQL Server 2017 on Windows (all editions) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use)

症狀

請考慮以下案例:

  • 您在 SQL Server 2016 和 2017 中擁有 SQL CLR 函數。
  • CLR 函數透過模擬呼叫叫用 Transact-SQL 陳述式,例如呼叫 EXECUTE AS 陳述式。

在此案例中,執行會失敗,且您會收到下列錯誤訊息:

注意

  • Msg 6522, Level 16, State 1, Procedure PrcedureName, Line 0 [Batch Start Line Number]
  • 執行使用者定義的常式或彙總 “ProcedureName” 期間發生.NET Framework錯誤:
  • System.Data.SqlClient.SqlException: 伺服器主體 “LoginName” 無法存取目前安全性內容下的資料庫 “DatabaseName”。

解決方式

此修正程式包含在 SQL Server 2017 累積更新 1 中。

SQL Server 2016 的 Service Pack 資訊

此問題已在下列 SQL Server Service Pack 中修正:

適用於 SQL Server 2016 的 Service Pack 2

關於 SQL Server 2017 組建

SQL Server 2017 的每個新組建都包含前一個組建中的所有 Hotfix 和安全性修正程式。 建議您安裝 SQL Server 2017 的最新組建。

關於 SQL Server Service Pack:

Service Pack 是累積性的。 每個新版 Service Pack 都包含前一版 Service Pack 中所有的修正程式,以及任何新增的修正程式。 我們的建議是套用最新的 Service Pack 和該 Service Pack 的最新累積更新。 所以在安裝最新版的 Service Pack 之前,您不需要安裝前一版的 Service Pack。 使用下列文章中的「表 1」,尋找有關最新 Service Pack 和最新累積更新的詳細資訊。

如何判斷 SQL Server 及其元件的版本、版次及更新層級

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

參考資料

了解 Microsoft 用來說明軟體更新的術語。