CORRECÇÃO: Usando xp_sendmail com um COMPUTE cláusula causa uma violação de acesso

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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 819955
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
BUG #: 469145 (SHILOH_BUGS)
Sintomas
Uma chamada para xp_sendmail procedimento armazenado estendido pode causar uma violação de acesso controlada quando todas as seguintes condições forem atendidas:
  • A chamada xp_sendmail deve usar @ query parâmetro para enviar um conjunto de registros.
  • A consulta passados para a @ consulta parâmetro deve incluir uma cláusula COMPUTE.
  • A consulta deve retornar sem linhas.
Aqui está um exemplo de uma consulta que pode enfrentar esse problema:
 EXEC master..xp_sendmail  @recipients = 'recipient_email_address', @message = 'Total Sum of Job ID' , @subject = 'Compute Sum', @width = 133 , @query = 'SELECT emp_id, fname, minit, lname, job_id, job_lvl, pub_id FROM pubs.dbo.employee WHERE 1=0 COMPUTE SUM (job_id)'
Observação esse problema é uma regressão que afeta somente um pequeno número de versões de hotfix 3 do post-SQL Server 2000 Service Pack. Esse problema se aplica somente aos computadores de servidor que estão executando o SQL Server 2000 hotfix compilações entre compilação 780 e 807 (inclusive). Verifique a versão do arquivo Sqlmap70.dll que está na pasta BINN da instância do SQL Server para determinar se a instância será afetada. A versão do arquivo afetado tem os seguintes atributos:
   Date         Time   Version        Size           File name   --------------------------------------------------------------   28-Feb-2003  01:34  2000.80.778.0  176,696 bytes  Sqlmap70.dll				
Resolução

Informações sobre o service pack

Para resolver esse problema, obtenha o service pack mais recente para o Microsoft SQL Server 2000. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
290211Como obter o SQL Server 2000 service pack mais recente

Informações sobre o hotfix

Observação Esse hotfix (compilação 811) só pode ser aplicado a SQL Server 2000 Service Pack 3.

A versão em inglês dessa correção apresenta os atributos de arquivo (ou posteriores) listados na tabela a seguir. As datas e horas desses arquivos são listadas na acordo hora universal coordenada (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para encontrar a diferença entre o UTC e a hora local, use a guia fuso horário na ferramenta Data e hora no painel de controle.
   Date         Time   Version         Size             File name   -------------------------------------------------------------------------------   26-Feb-2003  03:41  2000.80.777.0      29,244 bytes  Dbmslpcn.dll        08-Feb-2003  05:43                    786,432 bytes  Distmdl.ldf   08-Feb-2003  05:43                  2,359,296 bytes  Distmdl.mdf   30-Jan-2003  01:55                        180 bytes  Drop_repl_hotfix.sql   07-Apr-2003  19:15  2000.80.801.0   1,557,052 bytes  Dtsui.dll           24-Apr-2003  02:51                    747,927 bytes  Instdist.sql   30-Jan-2003  01:55                      1,402 bytes  Inst_repl_hotfix.sql   08-Feb-2003  06:40  2000.80.765.0      90,692 bytes  Msgprox.dll         01-Apr-2003  02:07                      1,873 bytes  Odsole.sql   05-Apr-2003  01:46  2000.80.800.0      62,024 bytes  Odsole70.dll        02-Apr-2003  21:48  2000.80.796.0      57,904 bytes  Osql.exe            02-Apr-2003  23:15  2000.80.797.0     279,104 bytes  Pfutil80.dll        04-Apr-2003  21:27                  1,083,467 bytes  Replmerg.sql   04-Apr-2003  21:53  2000.80.798.0     221,768 bytes  Replprov.dll        08-Feb-2003  06:40  2000.80.765.0     307,784 bytes  Replrec.dll         01-Apr-2003  02:23                  1,084,828 bytes  Replsys.sql   16-Apr-2003  22:39                    115,892 bytes  Sp3_serv_uni.sql   07-Apr-2003  17:44                     25,172 bytes  Sqldumper.exe       19-Mar-2003  18:20  2000.80.789.0      28,672 bytes  Sqlevn70.rll   24-Apr-2003  05:39  2000.80.811.0     176,696 bytes  Sqlmap70.dll        08-Feb-2003  06:40  2000.80.765.0      57,920 bytes  Sqlrepss.dll        24-Apr-2003  05:39  2000.80.811.0   7,540,817 bytes  Sqlservr.exe        08-Feb-2003  06:40  2000.80.765.0      45,644 bytes  Sqlvdi.dll          26-Feb-2003  03:41  2000.80.777.0      29,244 bytes  Ssmslpcn.dll        26-Feb-2003  03:41  2000.80.777.0      82,492 bytes  Ssnetlib.dll        28-Feb-2003  01:34  2000.80.778.0      98,872 bytes  Xpweb70.dll
Observação devido de dependências de arquivo, o hotfix mais recente ou recurso que contém os arquivos também podem conter arquivos adicionais.
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo. Esse problema foi corrigido primeiro no Microsoft SQL Server 2000 Service Pack 4.
Como Contornar
Para contornar o problema, você pode modificar a consulta para que ele executa uma COMPUTE somente quando há linhas a ser retornado. Por exemplo, você pode modificar a consulta na seção "Sintomas" da seguinte maneira para evitar o problema:
EXEC master..xp_sendmail  @recipients = 'recipient_email_address', @message = 'Total Sum of Job ID' , @subject = 'Compute Sum', @width = 133 , @query = 'IF EXISTS (SELECT 1  FROM pubs.dbo.employee WHERE 1=0)  SELECT emp_id, fname, minit, lname, job_id, job_lvl, pub_id FROM pubs.dbo.employee WHERE 1=0 COMPUTE SUM (job_id) ELSE SELECT ''No Data'' as [SUM]'
Referências

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 819955 - Última Revisão: 02/27/2014 02:13:34 - Revisão: 9.4

Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Workgroup Edition, Microsoft SQL Server 2000 Desktop Engine (Windows), Microsoft SQL Server 2000 Enterprise Edition 64-bit

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbqfe kbsqlserv2000presp4fix kbfix kbbug KB819955 KbMtpt
Comentários