症状
请考虑以下情况:
-
SQL Server 2016 和 2017 中具有 SQL CLR 函数。
-
CLR 函数通过模拟调用(例如通过调用 EXECUTE AS 语句)调用 Transact-SQL 语句。
在这种情况下,执行失败,并收到以下错误消息:
Msg 6522,级别 16,状态 1,过程 PrcedureName,第 0 行 [Batch Start LineNumber]
执行用户定义的例程或聚合“ProcedureName”期间发生.NET Framework错误:
System.Data.SqlClient.SqlException:服务器主体“LoginName”无法访问当前安全上下文下的数据库“DatabaseName”。
解决方法
此修补程序包含在 2017 SQL Server 累积更新 1 中。
2016 SQL Server Service Pack 信息
以下 service Pack 中修复了此问题,适用于SQL Server:
关于 SQL Server 2017 版本
SQL Server 2017 的每个新版本都包含上一版本中的所有修补程序和安全修补程序。 建议安装 SQL Server 2017 的最新版本。
Service Pack 具有累积性。 每个新 Service Pack 除了包含所有新修复程序外,还包含以前 Service Pack 中的所有修复程序。 建议为该服务包应用最新的 Service Pack 和最新的累积更新。 在安装最新的 Service Pack 之前,不需要安装以前的 Service Pack。 使用以下文章中的表 1 查找有关最新 Service Pack 和最新累积更新的详细信息。
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
参考
了解 Microsoft 用于描述软件更新 的术语 。