使用 Microsoft 登录
登录或创建帐户。
你好,
使用其他帐户。
你有多个帐户
选择要登录的帐户。

Microsoft 将 Microsoft SQL Server 2008 R2 Service Pack 1 (SP1)作为一个可下载文件进行分发。 由于修补程序是累积的,因此每个新版本都包含以前的 SQL Server 2008 R2 Service Pack 1 (SP1)更新版本附带的所有修补程序和所有安全更新。

症状

当 Microsoft SQL Server 2008 R2 中引发 SQL Server 性能条件警报时,你可能会收到以下错误消息:

消息512、级别16、状态1、过程 sp_sqlagent_get_perf_counters、行40Subquery 返回的值多于1。 当子查询跟随在 =、! =、<、<=、>、>= 或子查询用作表达式时,则不允许此操作。

此外,在这种情况下,将在 SQL Server 代理错误日志中记录该错误消息。注意 此问题也会在 Microsoft SQL Server 2008 中发生。

原因

出现此问题的原因是 msdb.dbo.sp_sqlagent_get_perf_counters system 存储过程的子查询错误地计算计数器的值。 子查询在子查询的条件中缺少 [object_name] 列的内部联接关系。 因此,错误地返回多行,并且出现 "症状" 部分中提及的问题。注意 Msdb.dbo.sp_sqlagent_get_perf_counters系统存储过程在引发 SQL Server 性能条件警报时运行。

解决方案

累积更新信息

SQL Server 2008 R2 SP1 的累积更新包3

此问题的修补程序首次发布于累积更新程序包3。有关如何获取此累积更新包的 SQL Server 2008 R2 SP1 的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2591748 SQL Server 2008 R2 SP1 的累积更新包3注意 由于这些版本是累积的,因此每个新的更新版本都包含以前的 SQL Server 2008 R2 SP1 更新版本附带的所有修补程序和所有安全更新。 我们建议你考虑应用包含此修补程序的最新更新版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

2567616 发布 SQL Server 2008 R2 SP1 后发布的 SQL Server 2008 R2 版本

解决方法

若要解决此问题,请更新 msdb.dbo.sp_sqlagent_get_perf_counters 系统存储过程的子查询。 若要执行此操作,请将以下条件添加到在[value]列计算中使用的四个子查询的WHERE子句中:

(spi1.[object_name] = spi2.[object_name])

添加条件后,子查询类似于以下内容:

SELECT CASE spi2.cntr_value WHEN 0 THEN 1 ELSE spi2.cntr_value ENDFROM sys.dm_os_performance_counters spi2WHERE (spi1.[object_name] = spi2.[object_name])AND (spi1.counter_name + ' ' = SUBSTRING(spi2.counter_name, 1, PATINDEX('% Base%', spi2.counter_name)))AND (spi1.instance_name = spi2.instance_name)AND (spi2.cntr_type = @perfTypeLargeRawBase

状态

Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?
按“提交”即表示你的反馈将用于改进 Microsoft 产品和服务。 你的 IT 管理员将能够收集此数据。 隐私声明。

谢谢您的反馈!

×