CORRIGER : Un résultat Incorrect lorsque vous exécutez une requête qui contient une conjonction et une disjonction dans SQL Server Compact 3.5

Traductions disponibles Traductions disponibles
Numéro d'article: 2494715
Agrandir tout | Réduire tout

Symptômes

Lorsque vous exécutez une requête sur une base de données Microsoft SQL Server Compact 3.5, un résultat incorrect est renvoyé. Ce problème se produit lorsque la requête contient une conjonction et une disjonction. Si nous supposons que les opérateurs sont ET et OR, la requête doit respecter les conditions spécifiques suivantes :
  • L'un des opérandes de la ET l'opérateur est une expression qui contient le OR opérateur.
  • Les opérandes de laORopérateur de contenir des expressions qui font référence à la même colonne. Par conséquent, un index de la colonne peut être utilisé pour faire correspondre les expressions.
  • L'autre opérande de le ETopérateur contient une référence à une colonne qui utilise le même index que la colonne est spécifiée dans la puce précédente dans cette liste. Par conséquent, l'index peut être également utilisé sur cette expression.
Par exemple, supposons que vous créez les tables suivantes utilisent des index dans une base de données SQL Server Compact 3.5.
CREATE TABLE T1(
 C1 int,
 C2 int
)
GO
CREATE INDEX IND_T1 ON T1 (C1, C2)
GO
CREATE TABLE T2(
 C1 int,
 C2 int
)
GO
CREATE INDEX IND_T2 ON T2 (C1, C2)
GO
INSERT INTO T1 VALUES (1, 0)
GO
INSERT INTO T1 VALUES (2, 0)
GO
INSERT INTO T2 VALUES (1, -1)
GO
INSERT INTO T2 VALUES (2, 0)
GO
Ensuite, vous exécutez la requête suivante :
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]
FROM T1 INNER JOIN T2 ON
T1.C1 = T2.C1
AND (T1.C2 = T2.C2 OR T2.C2 = -1)
GO
Après avoir exécuté la requête, vous recevez un résultat incorrect suivant :
Réduire ce tableauAgrandir ce tableau
T1.C1T1.C2T2.C1T2.C2
2020
Cependant, vous attendez le résultat suivant :
Réduire ce tableauAgrandir ce tableau
T1.C1T1.C2T2.C1T2.C2
101-1
2020
RemarqueCe problème se produit également lorsque vous utilisez leclause pour effectuer une conjonction logique sur deux expressions. Par exemple, ce problème se produit également lorsque vous exécutez la requête suivante :
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]
FROM T1 INNER JOIN T2 ON
T1.C1 = T2.C1
WHERE T1.C2 = T2.C2 OR T2.C2 = -1
GO

Résolution

Le correctif qui résout ce problème est inclus dans le package de mise à jour cumulative 4 pour SQL Server Compact 3.5 Service Pack 2.

Pour plus d'informations sur la façon d'obtenir le package de mise à jour cumulative 4 pour SQL Server Compact 3.5 Service Pack 2, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
2516828 Mise à jour cumulative 4 pour SQL Server Compact 3.5 Service Pack 2

Contournement

Pour contourner ce problème, réécrivez la requête en utilisant l'une des méthodes suivantes :

Méthode 1

Utilisez les indicateurs de table dans la requête pour désactiver les index. Par exemple, exécutez la requête suivante pour désactiver l'index :
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]
FROM T1 INNER JOIN T2 WITH (INDEX(0)) ON
T1.C1 = T2.C1
AND (T1.C2 = T2.C2 OR T2.C2 = -1)
GO 

Méthode 2

Réécrire la requête afin d'éviter les conditions qui sont mentionnés dans la section « Symptômes » :
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]
FROM T1 INNER JOIN T2 ON
(T1.C1 = T2.C1 AND T2.C2 = -1) OR (T1.C1 = T2.C1 AND T1.C2 = T2.C2)

Statut

Microsoft a confirmé qu'il s'agit d'un problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Propriétés

Numéro d'article: 2494715 - Dernière mise à jour: mercredi 27 avril 2011 - Version: 2.0
Mots-clés : 
kbfix kbqfe kbexpertiseadvanced kbsurveynew kbmt KB2494715 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: 2494715
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