Update: Falsche Ergebnisse, wenn Sie eine Abfrage ausführen enthält, eine Verbindung und eine Disjunktion in SQL Server Compact 3.5

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 2494715
Problembeschreibung
Wenn Sie eine Abfrage in einer Microsoft SQL Server Compact 3.5-Datenbank ausführen, wird ein falsches Ergebnis zurückgegeben. Dieses Problem tritt auf, wenn die Abfrage eine Verbindung und eine Disjunktion enthält. Wenn wir davon ausgehen, dass es sich bei die Operatoren sind UND und OR, die Abfrage muss die folgenden Bedingungen erfüllen:
  • Einer der Operanden von der UND Operator ist ein Ausdruck, der enthält die OR Operator.
  • Operanden derOROperator keine Ausdrücke, die die gleiche Spalte verweisen. Aus diesem Grund kann ein Index der Spalte entsprechend der Ausdrücke verwendet werden.
  • Der andere Operand der UNDOperator enthält einen Verweis auf eine Spalte, die denselben Index wie die Spalte verwendet wird, die im vorherigen Punkt in dieser Liste angegeben ist. Der Index kann daher auch auf diesen Ausdruck verwendet werden.
Nehmen wir beispielsweise an, dass Sie in den folgenden Tabellen erstellen, die Indizes in einer SQL Server Compact 3.5-Datenbank zu verwenden.
CREATE TABLE T1( C1 int, C2 int)GOCREATE INDEX IND_T1 ON T1 (C1, C2)GOCREATE TABLE T2( C1 int, C2 int)GOCREATE INDEX IND_T2 ON T2 (C1, C2)GOINSERT INTO T1 VALUES (1, 0)GOINSERT INTO T1 VALUES (2, 0)GOINSERT INTO T2 VALUES (1, -1)GOINSERT INTO T2 VALUES (2, 0)GO
Anschließend führen Sie die folgende Abfrage:
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]FROM T1 INNER JOIN T2 ONT1.C1 = T2.C1AND (T1.C2 = T2.C2 OR T2.C2 = -1)GO
Nachdem Sie die Abfrage ausführen, erhalten Sie das folgende falsche Ergebnis:
T1.C1T1.C2T2.C1T2.C2
2020
Sie erwarten jedoch, dass das folgende Ergebnis:
T1.C1T1.C2T2.C1T2.C2
101-1
2020
HinweisDieses Problem tritt auch bei Verwendung derWHERE-Klausel, um eine logische Konjunktion zweier Ausdrücke ausgeführt. Beispielsweise tritt dieses Problem auch, wenn Sie die folgende Abfrage ausführen:
SELECT T1.C1 [T1.C1], T1.C2 [T1.C2], T2.C1 [T2.C1], T2.C2 [T2.C2]FROM T1 INNER JOIN T2 ONT1.C1 = T2.C1WHERE T1.C2 = T2.C2 OR T2.C2 = -1GO
Lösung
Dieser Hotfix, der dieses Problem behebt ist im kumulativen Updatepaket 4 für SQL Server Compact 3.5 Service Pack 2 enthalten.

Weitere Informationen zum kumulativen Updatepaket 4 für SQL Server Compact 3.5 Service Pack 2 zu erhalten finden Sie in folgendem Artikel der Microsoft Knowledge Base anzuzeigen:
2516828 Kumulatives Update 4 für SQLServer Compact 3.5 Servicepack 2
Abhilfe
Schreiben Sie die Abfrage mithilfe einer der folgenden Methoden, um dieses Problem zu umgehen:

Methode 1

Verwenden Sie Tabellen-Hints in der Abfrage, um die Indizes zu deaktivieren. Führen Sie beispielsweise die folgende Abfrage, die Indizes zu deaktivieren:
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)) ONT1.C1 = T2.C1AND (T1.C2 = T2.C2 OR T2.C2 = -1)GO 

Methode 2

Neu schreiben Sie die Abfrage, um zu vermeiden, die die im Abschnitt "Problembeschreibung" genannten Bedingungen erfüllen:
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)
Status
Microsoft hat bestätigt, dass dies ein Problem in Microsoft-Produkten handelt, die im Abschnitt "Beziehen sich auf" aufgeführt sind.

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 2494715 – Letzte Überarbeitung: 04/27/2011 09:17:00 – Revision: 2.0

  • kbfix kbqfe kbexpertiseadvanced kbsurveynew kbmt KB2494715 KbMtde
Feedback