CORRECTIF : un curseur côté serveur peut renvoyer des résultats incorrects

Traductions disponibles Traductions disponibles
Numéro d'article: 286788 - Voir les produits auxquels s'applique cet article
BUG #: 351513 (Shiloh_bugs)
BOGUE #: 101092 (SQLBUG_70)
Agrandir tout | Réduire tout

Sommaire

Symptômes

Un curseur côté serveur dynamiques ou jeu de clés, peut renvoyer des résultats incorrects si les conditions suivantes sont remplies :
  • La requête utilise une instruction Sub-SELECT sous la forme d'une liste de colonne.
  • Le Sub-SELECT utilise la fonction COUNT(*).
  • Le Sub-SELECT a une jointure ANSI avec une condition.
  • La table de clause de FROM externe a une jointure Transact-SQL avec un Sub-SELECT.

Résolution

SQL Server 2000

Pour résoudre ce problème, procurez-vous le dernier service pack pour SQL Server 2000. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
290211 Fichier INF: Comment faire pour obtenir le dernier Service Pack SQL Server 2000

SQL Server 7.0

Pour résoudre ce problème, procurez-vous le dernier service pack pour Microsoft SQL Server 7.0. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
301511 Fichier INF: Comment faire pour obtenir le dernier Service Pack SQL Server 7.0

Statut

Microsoft a confirmé que c'est un problème dans les produits Microsoft répertoriés au début de cet article.

SQL Server 2000
Ce problème a été corrigé dans SQL Server 2000 Service Pack 1.

SQL Server 7.0
Ce problème a été corrigé dans Microsoft SQL Server 7.0 Service Pack 4.

Plus d'informations

Pour reproduire le problème, exécutez ce code :
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
				

Propriétés

Numéro d'article: 286788 - Dernière mise à jour: vendredi 31 octobre 2003 - Version: 3.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 2000 Standard
  • Microsoft SQL Server 7.0 Standard
Mots-clés : 
kbmt kbbug kbfix kbsqlserv2000sp1fix KB286788 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 286788
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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