CORRECÇÃO: O SQL Server pode falhar quando um pedido de execução de um procedimento armazenado remoto contém definição incompleta de argumentos

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 3135750
Sintomas
Num servidor remoto que esteja a executar o Microsoft SQL Server 2012 ou SQL Server 2014, dispõe de um procedimento armazenado que tem um argumento de saída semelhante à seguinte:

create procedure procExample @retVal varchar(10) outputas set @retVal = 'Goodbye';
Normalmente, a sintaxe para invocar uma procedimento remoto é semelhante ao seguinte:

-- 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;
Se omitir o "? Parte de saída"da sintaxe de chamada, o servidor local com o SQL Server poderá falhar. O servidor remoto continuar a funcionar porque a execução atinge nunca devido a esta omissão de sintaxe. Por exemplo, a sintaxe é semelhante ao seguinte:

-- 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];
Uma variável que não foi inicializada não faz com que o servidor local a falha. No entanto, se gerar uma mensagem de erro que afirma que nem todos os argumentos especificados para a chamada (como deverão ser). Por exemplo, ter a seguinte sintaxe:

-- 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];
Neste caso, recebe uma mensagem de erro semelhante à seguinte:

Msg 201, nível 16, estado 4, procExample de procedimento, linha 10

Procedimento ou função 'procExample' espera que o parâmetro '@retVal', que não foi fornecido.
Resolução

Informações sobre a atualização

Este problema foi corrigido pela primeira vez na actualização cumulativa para o SQL Server:
Recomendação: Instale a actualização cumulativa mais recente para o SQL Server

Cada nova actualização cumulativa para o SQL Server contém todas as correcções e todas as correcções de segurança que foram incluídas na anterior actualização cumulativa. Verifique as actualizações cumulativas mais recentes para o SQL Server:

Nota Pode encontrar informações sobre o SQL Server mais recente cria a partir de Onde encontrar informações sobre o SQL Server mais recente cria.
Ponto Da Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na secção "Aplica-se a".
Referências
Obter informações sobre o terminologia que a Microsoft utiliza para descrever atualizações de software.

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 3135750 - Última Revisão: 05/31/2016 12:17:00 - Revisão: 3.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 KbMtpt
Comentários