現在オフラインです。再接続するためにインターネットの接続を待っています

FIX 接続詞と SQL Server Compact 3. 5 で、和を求めるクエリを実行すると、誤った結果を含む

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:2494715
現象
Microsoft SQL Server Compact 3. 5 のデータベースに対してクエリを実行すると、間違った結果が返されます。この問題は、接続詞と、和を求めるクエリを含む場合に発生します。演算子は、あることを前提とした場合 または、クエリは次の特定の条件を満たす必要があります。
  • いずれかのオペランドが 演算子を含む式では、 または 演算子です。
  • オペランドは、または演算子には、同じ列を参照する式が含まれます。そのため、式に一致する列のインデックスを使用できます。
  • 他のオペランドは、 演算子には、同じインデックスを使用して、以前の行頭文字の位置] ボックスの一覧で指定された列の列への参照が含まれます。したがって、インデックスをこの式を使用することもできます。
たとえば、SQL Server Compact 3. 5 データベースでインデックスを使用して、次の表を作成することを想定しています。
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
その後、次のクエリを実行します。
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
クエリを実行すると、次の不適切な結果が表示されます。
T1。C1T1。C2T2。C1T2。C2
2020
ただし、次の結果は、期待される結果します。
T1。C1T1。C2T2。C1T2。C2
101-1
2020
メモこの問題は、使用する場合にも発生、場所句を使用して 2 つの式の論理積を実行します。たとえば、次のクエリを実行するときこの問題も発生します。
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
解決方法
この問題を解決する修正プログラムは SQL Server Compact 3. 5 Service Pack 2 の累積的な更新プログラム パッケージ 4 の含まれます。

SQL Server Compact 3. 5 Service Pack 2 の累積的な更新プログラム パッケージの 4 を入手する方法の詳細については、「サポート技術情報」資料を参照するには、次の資料番号をクリックしてください。
2516828 累積的な更新 4 で SQL Server Compact 3. 5 の Service Pack 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)) ONT1.C1 = T2.C1AND (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 では、この問題を記載されているマイクロソフト製品の問題として認識しています。

警告: この記事は自動翻訳されています

プロパティ

文書番号:2494715 - 最終更新日: 04/27/2011 09:18:00 - リビジョン: 2.0

  • kbfix kbqfe kbexpertiseadvanced kbmt kbsurveynew KB2494715 KbMtja
フィードバック
/html>"display:none;" onerror="var m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">