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

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 2494715
Alles erweitern | Alles schließen

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
)
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
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 ON
T1.C1 = T2.C1
AND (T1.C2 = T2.C2 OR T2.C2 = -1)
GO
Nachdem Sie die Abfrage ausführen, erhalten Sie das folgende falsche Ergebnis:
Tabelle minimierenTabelle vergrößern
T1.C1T1.C2T2.C1T2.C2
2020
Sie erwarten jedoch, dass das folgende Ergebnis:
Tabelle minimierenTabelle vergrößern
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 ON
T1.C1 = T2.C1
WHERE T1.C2 = T2.C2 OR T2.C2 = -1
GO

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)) ON
T1.C1 = T2.C1
AND (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.

Eigenschaften

Artikel-ID: 2494715 - Geändert am: Mittwoch, 27. April 2011 - Version: 2.0
Keywords: 
kbfix kbqfe kbexpertiseadvanced kbsurveynew kbmt KB2494715 KbMtde
Maschinell übersetzter Artikel
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
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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