CORRECÇÃO: O cursor do lado servidor pode retornar resultados incorretos

Traduções deste artigo Traduções deste artigo
ID do artigo: 286788 - Exibir os produtos aos quais esse artigo se aplica.
Erro nº: 351513 (Shiloh_bugs)
BUG #: 101092 (SQLBUG_70)
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Um cursor do lado servidor dinâmico ou orientado a conjunto de chaves, pode retornar resultados incorretos se todas as seguintes condições forem atendidas:
  • A consulta usa uma instrução Sub-SELECT como uma lista de colunas.
  • O Sub-SELECT usa a função COUNT(*).
  • O Sub-SELECT tem uma associação ANSI com uma condição.
  • A tabela de cláusula FROM externa tem uma associação de Transact-SQL com uma Sub-SELECT.

Resolução

SQL Server 2000

Para resolver esse problema, obtenha o service pack mais recente para o 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:
290211INF: Como obter o Service Pack mais recente do SQL Server 2000

SQL Server 7.0

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

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo.

SQL Server 2000
Esse problema foi corrigido primeiro no SQL Server 2000 Service Pack 1.

SQL Server 7.0
Esse problema foi corrigido primeiro no Microsoft SQL Server 7.0 Service Pack 4.

Mais Informações

Para reproduzir o problema, execute este código:
CREATE TABLE  TABLE1( T1COL1 int NOT NULL PRIMARY KEY)
go
CREATE TABLE  TABLE2(
 T2COL1 int NOT NULL PRIMARY KEY,
 T2COL2 int NOT NULL )
go

CREATE TABLE TABLE3(
	T3COL1 int NOT NULL)
go
Insert into TABLE1(T1COL1) values(4)
Insert into TABLE1(T1COL1) values(3)
Insert into TABLE2(T2COL1, T2COL2) values(5, 3)
Insert into TABLE2(T2COL1, T2COL2) values(6, 4)
Insert into TABLE3(T3COL1) values(6)
go

-------------- REPRO SCRIPT (Correct result would be 0,1) -------------
declare test cursor keyset for Select (select count(*)
      from dbo.TABLE2 as T2 join dbo.TABLE3 as T3 on T3.T3COL1 = T2.T2COL1
      where T2.T2COL2 = T1.T1COL1) as Para
 from dbo.TABLE1 as T1
open test
fetch test
fetch test
deallocate test


--------------- Workaround (Join condition moved to WHERE clause) ----------------
declare test cursor keyset local for Select (select count(*)
      from dbo.TABLE2 as T2, dbo.TABLE3 as T3 
      where T2.T2COL2 = T1.T1COL1 and T3.T3COL1 = T2.T2COL1) as Para
       from dbo.TABLE1 as T1

open test
fetch test
fetch test
deallocate test
				

Propriedades

ID do artigo: 286788 - Última revisão: sexta-feira, 31 de outubro de 2003 - Revisão: 3.2
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
Palavras-chave: 
kbmt kbbug kbfix kbsqlserv2000sp1fix KB286788 KbMtpt
Tradução automática
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: 286788

Submeter comentários

 

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