修复: 运行时的 TRANSACT-SQL 脚本在 SQL Server 2005年中或在 SQL Server 2008 年 SQL Server 代理程序作业的步骤中,TRANSACT-SQL 脚本的结果可能会被截断

文章翻译 文章翻译
文章编号: 955695 - 查看本文应用于的产品
重要 本文包含有关如何修改注册表的信息。请确保备份注册表之前对其进行修改。请确保您知道如何出现问题时还原注册表。有关如何备份、 还原和修改注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756 如何备份和还原在 Windows 注册表
Microsoft 将 Microsoft SQL Server 2005年修补程序分发作为一个可下载的文件。修补程序是累积性的因为每个新版本包含的所有修补程序和所有安全修补程序包含以前的 SQL Server 2005年修补程序版本。
展开全部 | 关闭全部

本文内容

症状

请考虑下面的方案。
  • 在 Microsoft SQL Server 2005年或 SQL Server 2008年中,SQL Server 代理作业中的一个步骤中运行一个 TRANSACT-SQL 脚本。
  • 在步骤中,第一条语句返回一条错误消息。
  • 更高版本的语句,还返回一个或多个错误消息。
在这种情况下,当您运行 SQL Server 代理作业中,您可能会发现未处理的更高版本的语句,该步骤会错误地返回成功状态。更高版本的语句的结果将被截断。

原因

SQL Server 2005年代理连接到 SQL Server 2005年实例使用的 SQL 本机客户端驱动程序 (Sqlncli.dll)。SQL Server 2000年代理连接到 Microsoft SQL Server 2000年使用 SQL Server ODBC 驱动程序 (Sqlsrv32.dll)。返回从 SQL Server 到 SQL Server 代理行为差异导致两个驱动程序之间的表格式数据数据流 (TDS) 错误标记中的更改。这会导致行为 SQL Server 代理的两个版本之间的差异。

解决方案

SQL Server 2005

此问题的修补程序是累积更新 9 中首次推出。有关如何获取此累积更新包的 SQL Server 2005 Service Pack 2 的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
953752 对于 SQL Server 2005 Service Pack 2 的累积更新包 9
请注意 生成是累积性的因为每个新修补程序版本包含的所有修补程序和所有安全修补程序包含以前的 SQL Server 2005年修补程序版本。Microsoft 建议您考虑应用最新的修补程序版本包含此修复程序。有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
937137 SQL Server 2005年生成 SQL Server 2005 Service Pack 2 发布后发布
为特定的 SQL Server 服务包创建 Microsoft SQL Server 2005年修补程序。您必须将 SQL Server 2005 Service Pack 2 修补程序应用于 SQL Server 2005 Service Pack 2 的安装。默认情况下任何一个 SQL Server service pack 中提供的修补程序包含在下一步的 SQL Server service pack。

SQL Server 2008

此问题的修补程序将并入到 RTM versiom SQL Server 2008 年。但是,若要启用此修复程序,仍然必须进行"更多信息"一节中描述的注册表更改。

替代方法

要解决此问题,请作为该步骤中的第一个语句中添加一个虚拟的 SELECT 语句。

状态

Microsoft 已经确认这是在"适用于"一节中列出的 Microsoft 产品中的问题。

更多信息

警告 如果通过使用注册表编辑器或使用另一种方法不正确修改注册表,可能会出现严重的问题。这些问题可能需要重新安装操作系统。Microsoft 不能保证可以解决这些问题。修改注册表的风险由您自己承担。
若要启用此修复程序,必须创建以下注册表项,然后将该注册表项设置为 0:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<mssql.x>\SQLServerAgent\TruncateJobResultOnError<b00></b00></mssql.x>

请注意 在此注册表项中, <mssql.x></mssql.x>表示 SQL Server 的实例的 ID。您必须更改为正确的值为实例。

如果您想要禁用此修补程序,请将 TruncateJobResultOnError 注册表项设置为 1。

重现此问题的步骤

  1. 创建扩展存储的过程。例如,创建扩展存储的过程名为 xp_hello 的示例。
  2. 创建一个 SQL Server 代理的作业,然后在 SQL Server 代理程序作业的步骤中添加下面的语句:
    declare @txt int
    exec xp_hello @txt OUTPUT
    RAISERROR('One or more operations failed to complete.', 16, 1)
    
  3. 运行 SQL Server 代理作业。
在 xp_hello 扩展存储的过程返回一个错误的严重级别 1,TruncateJobResultOnError 注册表项设置为 0 时的作业步骤标记为失败。扩展存储的过程和 RAISERROR 语句 xp_hello 的结果会捕获作业的历史记录。当您查看作业的历史记录时,您发现步骤的严重级别为 16。

当 xp_hello 扩展存储的过程返回一个错误的严重级别 1,并将 TruncateJobResultOnError 注册表项设置为 1 时,作业步骤标记为成功。只有 xp_hello 扩展存储的过程的结果被捕获作业的历史记录中。RAISERROR 语句的结果被截断。当您查看作业的历史记录时,您发现的步骤的严重级别为 1。

Xp_hello 扩展存储的过程返回一个错误的严重级别 11 和 TruncateJobResultOnError 注册表项设置为 0,当作业步骤标记为失败。Xp_hello 的结果扩展存储的过程和 RAISERROR 语句会捕获作业的历史记录。当您查看作业的历史记录时,您发现步骤的严重级别为 16。

当 xp_hello 扩展存储的过程返回一个错误的严重级别 11 和 TruncateJobResultOnError 注册表项设置为 1 时,作业步骤标记为失败。只有 xp_hello 扩展存储的过程的结果被捕获作业的历史记录中。RAISERROR 语句的结果被截断。当您查看作业的历史记录时,您发现的步骤的严重级别为 11。

有关错误消息的严重级别上的差异的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
309802修复: TRANSACT-SQL 批处理中的 RAISERROR 语句的调用可能会导致 sqlagent 才作业失败,并会丢失在 SQL Server 中的输出
903086 修复: 批处理作业将停止运行,并作为 SQL Server 2000年中的 SQL Server 代理作业运行的 TRANSACT-SQL 脚本时,作业输出将被截断
有关更改了哪些文件,详细信息和有关要应用包含在这篇 Microsoft 知识库文章中介绍的修复程序的累积更新包的任何系统必备组件的信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
953752 对于 SQL Server 2005 Service Pack 2 的累积更新包 9

参考

SQL Server Service Pack 2 之后的生成的列表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
937137 SQL Server 2005年生成 SQL Server 2005 Service Pack 2 发布后发布
SQL Server 为增量的处理模型的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
935897 增量的处理模型都可用从 SQL Server 团队提供的报告的问题的修补程序
有关如何获取 SQL Server 2005 Service Pack 2 的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
913089 如何获取最新的 service pack,SQL Server 2005 年
有关新功能和改进 SQL Server 2005 Service Pack 2 的详细信息,请访问下面的 Microsoft 网站:
http://go.microsoft.com/fwlink/?LinkId = 71711
有关命名架构的 SQL Server 更新的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
822499 对于 Microsoft SQL Server 软件更新程序包的新命名方案
有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684 用于描述 Microsoft 软件更新的标准术语的说明

属性

文章编号: 955695 - 最后修改: 2011年6月16日 - 修订: 1.0
这篇文章中的信息适用于:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Standard
关键字:?
kbsql2005tool kbfix kbpubtypekc kbqfe kbexpertiseadvanced kbmt KB955695 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 955695
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com