修复 ︰ SQL Server 可能会崩溃时征求执行远程存储过程包含参数的定义不完整

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 3135750
症状
在运行 Microsoft SQL Server 2012年的远程服务器或 SQL Server 2014年,必须有一个类似于以下内容的输出参数的存储的过程 ︰

create procedure procExample @retVal varchar(10) outputas set @retVal = 'Goodbye';
通常情况下,这种远程过程调用的语法如下所示 ︰

-- Declare a variable to hold a result, and have it initialized with a non-NULL valuedeclare @outputResult varchar(10) = 'Hello';execute ('MyDb.dbo.procExample ? OUTPUT', @outputResult OUTPUT) at [MyRemoteServer];print @outputResult;
如果省略"?输出"的调用语法的一部分,正在运行 SQL Server 的本地服务器可能会崩溃。远程服务器继续运行因为执行永远不会到达其由于此语法省略。例如,语法如下所示 ︰

-- Declare a variable to hold a result, and have it initialized with a non-NULL valuedeclare @outputResult varchar(10) = 'Hello';execute ('MyDb.dbo.procExample', @outputResult OUTPUT) at [MyRemoteServer];
未初始化的变量不会导致本地服务器崩溃。但是,它不会生成一条错误消息,指出并非所有参数都被都指定调用 (为他们应该)。例如,您有以下语法 ︰

-- Declare a variable to hold a result, and initialize it with NULL, or leave uninitializeddeclare @outputResult varchar(10) = NULL;execute ('MyDb.dbo.procExample', @outputResult OUTPUT) at [MyRemoteServer];
在这种情况下,您收到类似于以下内容的错误消息 ︰

Msg 201、 级别 16、 状态 4、 过程 procExample,行 10

过程或函数 'procExample' 预计参数 @retVal,但未提供该。
解决方案

更新信息

第一次下累积更新 SQL Server 中修复此问题 ︰
建议 ︰ 设置 SQL Server 的累积更新

SQL Server 的每个新累积更新包含所有修补程序和所有安全修复程序包括在以前的累积更新。为 SQL Server,请查阅最新的累积更新 ︰

注意:您可以找到有关最新的 SQL Server 生成的信息从 在哪里可以找到有关最新的 SQL Server 版本.
状态
Microsoft 已经确认这是"适用于"一节中列出的 Microsoft 产品中的问题。
参考
了解有关 术语 Microsoft 用于描述软件更新。

警告:本文已自动翻译

属性

文章 ID:3135750 - 上次审阅时间:05/31/2016 12:25:00 - 修订版本: 4.0

Microsoft SQL Server 2012 Service Pack 2, Microsoft SQL Server 2014 Service Pack 1, Microsoft SQL Server 2014 Developer, Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2014 Standard

  • kbqfe kbfix kbexpertiseinter kbsurveynew kbmt KB3135750 KbMtzh
反馈