[FIX] サーバー側のカーソルが間違った結果を返す

文書翻訳 文書翻訳
文書番号: 286788 - 対象製品
この記事は、以前は次の ID で公開されていました: JP286788
すべて展開する | すべて折りたたむ

目次

現象

次の条件がすべて該当する場合に、サーバー側の動的なカーソルまたはキーセット ドリブン カーソルが間違った結果を返すことがあります。
  • クエリでサブ SELECT ステートメントが列リストとして使用される場合
  • サブ SELECT で COUNT(*) 関数が使用される場合
  • サブ SELECT に条件付きの ANSI 結合がある場合
  • 外部 FROM 句テーブルにサブ SELECT との Transact-SQL 結合がある場合

解決方法

SQL Server 2000

この問題を解決するために、SQL Server 2000 の最新の Service Pack の適用をお願いいたします。
最新の SQL Server サービスパックのダウンロードおよびインストールについて詳しくは以下をご覧下さい。

http://www.microsoft.com/japan/sql/download/default.asp (日本語版)
http://www.microsoft.com/sql/downloads/default.htm(英語版)

SQL Server 7.0

下記のいずれかの手段によりこの問題は回避可能です。
  • 静的カーソルを使用します。

  • クライアント側のカーソルを使用します。

  • ANSI 結合の条件を WHERE 句に移動します (「詳細」を参照してください)。

状況

弊社では、これを Microsoft SQL Server version 2000 及び 7.0 の問題として確認しています。
この問題は、Microsoft SQL Server version 2000 Service Pack 1 で修正されています。

詳細

以下のコードにより現象の再現が可能です。
CREATE TABLE  TABLE1( T1COL1 int NOT NULL PRIMARY KEY)
go
CREATE TABLE  TABLE2(
 T2COL1 int NOT NULL PRIMARY KEY,
 T2COL2 int NOT NULL )
go
CREATE TABLE TABLE3(
	T3COL1 int NOT NULL)
go
Insert into TABLE1(T1COL1) values(4)
Insert into TABLE1(T1COL1) values(3)
Insert into TABLE2(T2COL1, T2COL2) values(5, 3)
Insert into TABLE2(T2COL1, T2COL2) values(6, 4)
Insert into TABLE3(T3COL1) values(6)
go

-------------- 再現用スクリプト (正しい結果は 0 と 1 です) -------------
declare test cursor keyset for Select (select count(*)
      from dbo.TABLE2 as T2 join dbo.TABLE3 as T3 on T3.T3COL1 = T2.T2COL1
      where T2.T2COL2 = T1.T1COL1) as Para
 from dbo.TABLE1 as T1
open test
fetch test
fetch test
deallocate test


--------------- 回避策 (結合条件を WHERE 句に移動します) ----------------
declare test cursor keyset local for Select (select count(*)
      from dbo.TABLE2 as T2, dbo.TABLE3 as T3 
      where T2.T2COL2 = T1.T1COL1 and T3.T3COL1 = T2.T2COL1) as Para
       from dbo.TABLE1 as T1

open test
fetch test
fetch test
deallocate test

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 286788 (最終更新日 2001-08-17) をもとに作成したものです。

プロパティ

文書番号: 286788 - 最終更新日: 2004年3月2日 - リビジョン: 2.1
この資料は以下の製品について記述したものです。
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
キーワード:?
kbbug kbfix kbsqlserv2000bug kbsqlserv2000sp1fix kbsqlserv700bug KB286788
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

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