[SQL] 6.0 アプリケーションに影響する、SQL Server 6.5 の変更

文書翻訳 文書翻訳
文書番号: 152032 - 対象製品
この記事は、以前は次の ID で公開されていました: JP152032
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
すべて展開する | すべて折りたたむ

目次

概要

この資料には、Microsoft SQL Server version 6.5 になされた変更で、既存の SQL Server version 6.0 アプリケーションに影響を与える可能性のあるものが掲載されています。

内容 :
  1. システム テーブルの変更
  2. システム ストアド プロシージャの変更およびフォーマットの変更
  3. 新しいインストール デフォルト
  4. キーワード
  5. FROM 句とテーブル名
  6. SELECT DISTINCT と ORDER BY
  7. 外部キーの作成に必要な REFERENCES 権限
  8. 列名なしの SELECT INTO または CREATE VIEW
  9. 重要度レベルが 10 以下の場合、RAISERROR は @@ERROR をゼロに設定する
  10. スタートアップ プロシージャ: sp_sqlregister
  11. 前方スクロールカーソルがデフォルトで動的カーソルに
  12. ストアド プロシージャのカーソル プランがキャッシュされる
  13. 新サービス: MSDTC
  14. EXECUTE の中の USE ステートメントが完了と同時にリセットされる
  15. ODBC ドライバの設定
  16. JOIN 構文とトレース フラグ 204
  17. トランザクションの中で作成されるオブジェクト
  18. SELECT-INTO が原子的操作に
  19. パケットサイズ拡大のため、ISQL/W 接続が減少
  20. グローバル変数が CHECK および DEFAULT 制約において禁止
  21. Books Online: 新しいビューワ
  22. VBSQL.vbx に代わって VBSQL.OCX
  23. Graphical Showplan の削除
  24. 拡張ストアド プロシージャ
  25. 将来の懸念

詳細

1. システム テーブルの変更

システム テーブルに、次のような変更がありました。新しい列の追加、一部の列の意味または内容の変更、新しいシステム テーブルの追加、です。追加情報は、SQL Server 6.5 Books Online、「新機能のご紹介」 で、第 4 部の 「Transaction-SQL の新機能のご紹介」 を参照してください。

2. システム ストアド プロシージャの変更およびフォーマットの変更

システム ストアド プロシージャに、いくつか変更がありました。多くの場合、機能は、新しい SQL Server version 6.5 の機能を含むように拡張されました。中には、出力のフォーマットを、情報をより明確に表示するように修正したものもあります。追加情報は、SQL Server 6.5 Books Online、「新機能のご紹介」 で、第 4 部の 「Transaction-SQL の新機能のご紹介」 を参照してください。

3. 新しいインストール デフォルト

新しいインストールのデフォルト ルート ディレクトリは、MSSQL で、SQL60 (6.0 でのもの) や、SQL (4.2x でのもの) ではありません。4.2x や 6.0 のインストールをアップグレードする場合は、既存のディレクトリ名が維持されます。

4. キーワード

SQL Server 6.0 で予約されていた、下記の単語は、SQL Server 6.5 におけるキーワードです。
  AUTHORIZATION     FULL      OUTER          SCHEMA
  CASCADE           INNER     PRIVILEGES     WORK
  CROSS             JOIN      RESTRICT
  ESCAPE            LEFT      RIGHT

DISTRIBUTED という単語も、SQL Server 6.5 における新しいキーワードです。

SQL Server 6.5 へのアップグレード時には、ChkUpg65.EXE を実行して、すべてのデータ ベース オブジェクトと、これらの新しいキーワードとの競合をチェックしてください。

5. FROM 句とテーブル名

SQL Server 6.5 では、冗長なテーブル名が FROM 句に現れた時、エラーが報告されます。たとえば、下記の SELECT ステートメントは、これまでのリリースではサポートされていましたが、SQL Server 6.5 では、エラーになります。最初の SELECT ステートメントでは、そのテーブルは、2つの別々のテーブルとして扱われていました。二番目の SELECT ステートメントでは、二番目の author のリファレンスは廃棄されていました。
  SELECT * FROM pubs..authors, pubs.dbo.authors
  SELECT * FROM authors, authors

以前は、SQL Server は、文字列比較のみを使用して、2 つのテーブル名が同じテーブルを示しているかどうかを判断していました。たとえば、pubs.dbo.authors と pubs..authors は、別々のテーブルだとみなされていました。今後は、2 つのテーブル名が同一でない場合、データベース ID とテーブル ID を比較して、同じテーブルであるかどうかを判断することになります。以前は、Update ステートメントにおいて、SQL Server は、単純に FROM 句の中で、非限定列名に一致する最初のテーブルを検索し、それがユーザーが必要としているテーブルだと決め付けていました。今後は、こういったタイプのクエリーは、エラーを引き起こします。更新されるべきテーブルがあいまいだからです。トレース フラグ 110 により、これらの変更はすべて無効になります。

6. SELECT DISTINCT と ORDER BY

以前のバージョンの SQL Server では、選択リストにない列を ORDER BY 句の中のソート列に指定した、SELECT DISTINCT クエリーが使用可能でした。たとえば、次のようなものです。
  SELECT DISTINCT au_id FROM authors ORDER BY au_lname

SQL Server 6.5 は、ANSI 標準に従い、次のエラー 145 が発生します。
Order-by items must appear in the select-list if SELECT DISTINCT is specified.
集計関数を持たないクエリーは、選択リスト内にある GROUP BY 句にだけ式を含むことができます。

トレース フラグ 204 により、以前の、非 ANSI 動作が可能になります (これは、SQL Server 6.0 からの、サブクエリー等に関連する他の非 ANSI 動作と同じです)。

7. 外部キーの作成に必要な REFERENCES 権限

SQL Server 6.5 では、自分の所有でないテーブル上で外部キーを作成する場合は、そのテーブル上で、REFERENCES 権限を持っていなければなりません。これは、ANSI 標準にしたがっているものです。SQL Server 6.0 では、SELECT 権限のみが、参照されたテーブルで必要とされていました。トレース フラグ 237 により、以前の動作が可能になります。

8. 列名なしの SELECT INTO または CREATE VIEW

SQL Server version 6.5 では、SELECT INTO または CREATE VIEW ステートメントによって作成された列に、列名が与えられていない場合、エラーが起こります。たとえば、
CREATE VIEW testview AS SELECT au_id, upper(au_lname) FROM authors
により、次のエラー メッセージ 4511 が出ます。:
Create view failed because no column name was specified for column 2.
列 2 に対して列名が指定されていないのでビューが作成できませんでした。

SQL Server 6.0 では、これができました。トレース フラグ 246 を使えば、以前の動作が可能になります。

9. 重要度レベルが 10 以下の場合、RAISERROR は @@ERROR をゼロに設定する

RAISERROR ステートメントは、今後、重要度レベルが 1 から 10 の場合、@@ERROR をゼロに設定します (重要度レベルが 10 以下のメッセージは、エラーではありませんが、追加の情報を提供しています)。WITH SETERROR オプションを使って msg_id を設定する場合、RAISERROR ステートメントは、重要度レベルにかかわらず、msg_id を @@ERROR にアサインします。

SQL Server version 6.0 では、重要度レベルが 10 以下のメッセージに関しては、@@ERROR は 50,000 に設定されています。

SQL Server version 6.0 の動作に戻すには、SETERROR オプションか、トレース フラグ 2701 のいずれかを使用してください。

10. スタートアップ プロシージャ : sp_sqlregister

SQL Server 6.5 では、ストアド プロシージャ sp_sqlregister が、デフォルトのスタートアップ プロシージャとしてインストールされています。スタートアップ時、sp_sqlregister は、オペレーティング システム、ネットワーク、SQL Server から基本的な設定情報を収集し、それから、SQL Server がネットワーク上に存在することをブロードキャストします。xp_sqlinventory を実行しているサーバーはどれも、情報をテーブルに集めることができます。ストアド プロシージャ sp_unmakestartup を実行し、スタートアップ ストアド プロシージャとしての sp_sqlregister を削除することができます。

11. 前方スクロールカーソルがデフォルトで動的カーソルに

SQL Server 6.5 では、前方スクロールカーソルが、デフォルトで動的カーソルになります。これにより、カーソルが開くのが、より速くなり、結果セットは元になるテーブルに対して行われた更新を表示することができます。動的カーソルは、version 6.5 ではこれまでより速く、一意なインデックスを必要としません。

トレース フラグ 7501 により、動的カーソルの強化を不可能にし、version 6.0 の動作に戻すことができます。

12. ストアド プロシージャのカーソル プランがキャッシュされる

SQL Server 6.5 は、一部の拡張ストアド プロシージャのカーソルのプランをキャッシュし、それにより、多くのカーソル操作のパフォーマンスが向上します。しかし、これらのプランを保持するには、プロシージャ キャッシュをも使用することになり、おそらく、アプリケーションのキャッシュ動作 (およびパフォーマンス) に影響を与えるでしょう。トレース フラグ 7502 により、このカーソル プランのキャッシュができなくなります。

13. 新サービス : MSDTC

新しいサービスが、SQL Server 6.5 でインストールされます。MSDTC サービスとは、Distributed Transaction Coordinator (分散トランザクション コーディネータ) のことであり、これは、サーバー間のトランザクション機能 (自動 2 相コミット) を提供します。通常は、MSDTC サービスは、既存のアプリケーション (自動トランザクションの一貫性ではなく) に影響を与えないはずですが、実際、ある程度のメモリと処理時間を必要とするため、既存のアプリケーションに、何らかの影響が出ることがあるかもしれません。このサービスは、その機能が必要ない場合は、停止することができます。

14. EXECUTE の中の USE ステートメントが完了と同時にリセット

SQL Server 6.5 では、USE ステートメントを含む文字列の EXECUTE の完了と同時に、「現在のデータベース」 は、EXECUTE の前に使用されていたデータベースに、自動的にリセットされます。SQL Server 6.0 では、「現在のデータベース」 設定が、EXECUTE 後も残っていました。

SQL Server 6.0 と同じ動作を起こすには、使用されたデータベースで実行されるべきステートメントはそれぞれ、USE ステートメントが前に置かれた文字列として EXECUTE されなければなりません。次のバッチでは、SQL Server 6.0 では "pubs" を出力していましたが、SQL Server 6.5 では、"master" を出力します。
  USE master
  GO
  DECLARE @mydb VARCHAR(30)
  SELECT @mydb = 'pubs'
  EXECUTE('USE ' + @mydb)
  go
  SELECT db_name()
  go

SQL Server 6.0 の動作を SQL Server 6.5 で得るには、次のバッチを使用しなければなりません。
  USE master
  GO
  DECLARE @mydb VARCHAR(30)
  SELECT @mydb = 'pubs'
  EXECUTE('USE ' + @mydb + 'SELECT db_name()')
  go

これは、SELECT を、使用されているデータベースで実行しますが、完了と同時に、マスタ データベースに戻ります。

15. ODBC ドライバの設定

TechNet PSS ID 149921 では、Microsoft SQL Server 2.65.0201 ODBC ドライバにおける ANSI 設定変更で、アプリケーションに影響を与える恐れのあるもののことが論じられています。一般的に、これらはすべて、次の、ANSI 準拠を強要する SET オプションが原因となっています。
   SET TEXTSIZE 2147483647
   SET ANSI_DEFAULTS ON
   SET CURSOR_CLOSE_ON_COMMIT OFF
   SET IMPLICIT_TRANSACTIONS OFF

16. JOIN 構文とトレース フラグ 204

以前のバージョンの SQL Server からの外部結合オペレータである *= と =* がサポートされていましたが、外部結合オペレータと ANSI-SQL 形式の結合テーブルの両方を、同一のクエリーで使用することはできません。

トレース フラグ 204 が使用可能になっている時は、SQL Server version 6.0 以前の SELECT ステートメント構文のみが許可され、結合テーブル、派生テーブル、その他の ANSI 機能は、許可されません。

17. トランザクションの中で作成されるオブジェクト

SQL Server 6.5 により、オブジェクトをトランザクション内で作成することが可能になります。これらの操作は、標準のトランザクション規則によって保護されており、必要に応じてコミットされたり、ロールバックされたりすることがあります。しかし、作成を行っているトランザクションがコミットあるいはロールバックするまでは、トランザクション内でオブジェクトを作成することは、データベース内のシステムテーブル上でロックが起こる原因になります。トランザクション内部でオブジェクトを作成する際は注意してください。これには、tempdb データベース内に一時的なオブジェクトを作成することも含まれます。

18. SELECT-INTO が原子的操作に

SELECT-INTO が、アトミック操作になり、SELECT-INTO の間、またはトランザクション内部の場合はトランザクションの間中、sysindexes, sysobjects, syscolumnsis で排他ロックを起こします。

19. パケット サイズ拡大のため ISQL/W 接続が減少

Win16 クライアント上の ISQL/w 接続数は、SQL Server の、ネットワーク パケット サイ設定値の影響を受けます。ネットワーク パケット サイズが小さいほど (最低 512 バイト)、より多くの同時接続を、同じ DB-Library クライアントから作ることができます。これは、ネットワーク パケット サイズが大きいほど、Windows 3.x クライアント上で、より多くのシステムリソースが使用されるからです。サーバー側のネットワーク パケット サイズが 512 に設定されている場合、SQL Server 6.0 でできたのと同じ数の接続を、同じクライアントから作ることができるはずです。追加情報は、次を参照してください。

TechNet PSS ID 150909 INF: Number of Connections for SQL Server 6.5 Win16 Clients

20. グローバル変数が CHECK および DEFAULT 制約において禁止

グローバル変数 (@@SPID 等) は、CHECK、DEFAULT といった制約においては、使用できません (CREATE TABLE ステートメント、ALTER TABLE ステートメントのどちらでも)。

これは、有効なオプションとして文書化されたことはなく、現在は、無効な構文としてフラグされており、次のエラー 112 を出します。
Variables are not allowed in CREATE TABLE statement.
CREATE TABLE ステートメントには変数は指定できません。

組み込み関数は、引き続き制約の中で動作します。

21. Books Online: 新しいビューワ

SQL Server 6.5 Books Online は、以前使用されていた MSIN32.EXE ではなく、InfoView.EXE プログラムを使用して、テキストをビューします。

Books Online を読むには、SQL Server をインストールする必要はありません。次のことを行うことにより、独立してインストール可能です。
  1. ディレクトリを作成 (たとえば、c:\sqlbks)
  2. \sqlbks65\sqlbooks.* ファイルと \i386\InfoView.exe を、CD-ROM から、そのディレクトリにコピー。6.0 の MSIN32.EXE は、6.5 のブックのリーダの役割は果たしません。必ず InfoView.exe が必要になります (DLL は必要ありません)。 次のものを使って、プログラム マネージャ アイテムを作成。

    • コマンドライン c:\sqlbks\infoview.exe sqlbooks.mvb
    • 作業ディレクトリ c:\sqlbks

こうすれば、オンライン ブックを読めるようになるはずです。

22. VBSQL.vbx に代わって VBSQL.ocx

Visual Basic 用の古い 16 ビット DB-Library である VBSQL.VBX を使用している Visual Basic 3.0 プロジェクトは、Visual Basic OLE カスタム コントロールである VBSQL.OCX 用の新しい DB-Library にポートされなければなりません。追加情報は、SQL Server 6.5 Books Online で、「古い DB-Library for Visual Basic プロジェクトのポーティング」 を参照してください。

23. Graphical Showplan の削除

SHOWPLAN 出力に変更があったため、プラン表示タブは、SQL Enterprise Manager のクエリーツールや ISQL/w では、もう利用できません。

24. 拡張ストアド プロシージャ

元になる構造の変更により、C プログラミング言語で書かれた拡張ストアドプロシージャはすべて、C ソースコードから再コンパイルされ、Microsoft SQL Server version 6.5の下で、OPENDS60.LIB に再リンクされなければなりません。

SQL Server 6.0 では、XP からサーバーにコール バックができましたが、これはサポートされてはいませんでした。このような 'loopback' 接続は、SQL Server 6.5 では、バウンド接続 (いくつかの接続が、同一のトランザクション ロック領域と、同一のトランザクションを共有できる) の使用を通してサポートされており、ロックの競合無しに同一のデータ上で作業を行うことができます。

25. 将来の懸念

SQL Server 6.5 には、一部の以前の機能に代わる、新しい機能が含まれています。SQL Server 6.0 からの機能はすべて、引き続き 6.5 でもサポートされますが、今後のバージョンの SQL Server は、他の方法で同じ機能が達成できるようなステートメントは、サポートしない場合もあると思われます。たとえば、次に挙げる機能は、6.5 ではサポートされますが、今後のバージョンでは中止される可能性があります。
  • ブラウズ モード : SELECT FOR BROWSE は、6.5 ではサポートされていますが、SELECT ステートメントの FOR BROWSE 句の機能は、カーソルを使うことで、より効果的に達成できるようになりました。
  • SQL Server 内のデバイスのミラー化 : 今インストールしている SQL Server が、現在 SQL Server のミラー化を使用しているとしたら、Windows NT のミラー化機能またはハードウェア ベースのミラー化を代わりに使用することをお勧めします。
  • 外部結合構文 : SQL Server 6.5 では、WHERE 句の中の外部結合用の '*=' や '=*' の構文は、FROM 句の中の ANSI 標準の結合構文に、次のものを使って置き換えることができます。

    LEFT OUTER JOIN、RIGHT OUTER JOIN、および FULL OUTER JOIN
  • 二重引用符のついた文字列 : 二重引用符の使用は、識別子の区切りや引用のために、予約しておくべきです。二重引用符は、(オブジェクト名ではなく) 文字列を区切るのに、依然として使用できますが、SET QUOTED_IDENTIFIER ON が実行された場合、二重引用符で区切られた文字列は、いずれも、識別子であると想定されます。
  • 等しくない (!=): ANSI 標準の構文で 「等しくない」 を表すものは、'<>' です。 ANSI 標準に準拠するように、'!=' ではなく、'<>' を使用するようにしてください。
  • Null 比較 (=NULL): ANSI 標準は IS NULL です。ANSI 標準に準拠するように、'IS NULL' を使用するようにしてください。実際、SET ANSI_NULLS ON が実行されている場合、'= NULL' は、すべての場合に FALSE を返します。ANSI が、NULL に等しい値はない (NULL 自身でさえも) と指定するからです。
  • トレース フラグ : 受信バッファをモニタリングするには、トレース フラグ 4030 および 4032 を使用する代わりに、SQL Trace を使用しなければなりません。

    Books Online によると、一般的に、トレース フラグは、永久的な解決法が整うまでの 間、一時的に問題を回避するために使用されるべきとなっています。トレース フラグが提供する情報が、問題の診断に役立つとは言っても、トレース フラグは、サポートされた機能のセットの一部ではないことを忘れないでください。これはつまり、将来的 な互換性や、継続的な使用は、保証されていないということです。

    次の機能の使用中止も、考慮に入れておかなければなりません。
  • セグメント : ユーザー定義のセグメントは、データベース オブジェクトがパフォーマンスの理由で、あるデバイスに置かれるようにするために使用されることが多くあります。マルチディスク RAID デバイスを使用すると、一般的に、関連の管理コストを低く抑えて、パフォーマンスをより向上させることができます。
  • DB-Library の 2 相コミット ライブラリ : Distributed Transaction Coordinator は、現在、この機能を自動的に提供しています。

関連情報

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

プロパティ

文書番号: 152032 - 最終更新日: 2014年2月10日 - リビジョン: 3.0
この資料は以下の製品について記述したものです。
  • Microsoft SQL Server 6.5 Standard Edition
キーワード:?
kbnosurvey kbarchive kbinfo KB152032
"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