修正: 不正確的結果,當您執行查詢時,包含連接詞以及在 SQL Server Compact 3.5 分離

文章翻譯 文章翻譯
文章編號: 2494715
全部展開 | 全部摺疊

徵狀

當您對 Microsoft SQL Server Compact 3.5 資料庫執行查詢時,會傳回不正確的結果。當查詢包含連接詞和分離,就會發生這個問題。如果我們假設是運算子 OR查詢必須符合下列特定的條件:
  • 其中一個的運算元 運算子是運算式,包含 OR 運算子。
  • 運算元OR運算子包含參考相同的資料行的運算式。因此,資料行的索引可以用來比對運算式。
  • 其他運算元的 運算子包含此清單中的前一個項目符號點中所指定的資料行使用的相同索引的直欄參照。因此,您可以也在此運算式上使用索引。
比方說,假設您建立下列資料表中使用 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
然後,您執行下列查詢:
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
在執行查詢之後,您會收到下列不正確的結果:
摺疊此表格展開此表格
T1。C1T1。C2T2。C1T2。C2
2020
然而,您應該下列結果:
摺疊此表格展開此表格
T1。C1T1。C2T2。C1T2。C2
101-1
2020
附註當您使用時,也會發生這個問題位置子句來對兩個運算式執行邏輯交集。比方說,這個問題也會發生當您執行下列查詢:
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

解決方案

解決了這個問題的 hotfix 併入累積更新套件 4 中,為 SQL Server Compact 3.5 Service Pack 2。

如需有關如何取得累積更新套件 4 的 SQL Server Compact 3.5 Service Pack 2 的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
2516828 累積更新 4 為 SQL Server Compact 3.5 服務套件 2

其他可行方案

若要解決這個問題,請使用下列方法之一重寫查詢:

方法 1

若要停用索引,查詢中使用資料表提示。例如,執行下列查詢若要停用索引:
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 

方法 2

重寫查詢,以避免會議"徵狀 〉 一節所述的條件:
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)

狀況說明

Microsoft 已確認這是在 「 Microsoft 產品資料 」 適用於 」 一節中所列的問題。

屬性

文章編號: 2494715 - 上次校閱: 2011年4月27日 - 版次: 2.0
關鍵字:?
kbfix kbqfe kbexpertiseadvanced kbsurveynew kbmt KB2494715 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:2494715
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

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