現象

次のような状況で問題が発生します。

  • SQL Server 2000 データベースで、特別な既定値を持つように構成されている、テーブル内の列がある。

  • このデータベースを以降のバージョンの SQL Server (SQL Server 2005、SQL Server 2008 または SQL Server 2008 R2 のいずれか) にアップグレードする。


この場合、アップグレード後のバージョンでは、列の既定値にはその前後に追加のかっこがあり、また SQL Server 2000 の元の既定値を受け付けるようにコーディングされたアプリケーションでエラーが発生します。

次の表に、SQL Server のさまざまなバージョンがカタログ メタデータのテーブルに既定値 0 を格納する方法を示します。

バージョン

SQL Server 2000

SQL Server 2005 以降

(0)

((0))


注: この問題は数値のみに影響します。SQL Server 2000 と新しいバージョンの両方で、テキストと関数は同じ形式で格納されます。
たとえば、text は (‘text’) として格納され、function() は (function()) として格納されます。

原因

この動作は仕様です。カタログ メタデータで SQL 式をデコードおよび格納する方法においては、新しいバージョンの SQL Server は SQL Server 2000 と異なります。関連情報については、この資料の「詳細」に記載されているさまざまなリンクを参照してください。

解決方法

新しい形式で既定値を受け付けるように、アプリケーションを修正します。たとえば、アプリケーションが、数値の前後に 1 セットのかっこがある "(0)" が既定値であると想定するように設計されている場合、SQL Server 2005 以降のバージョンのデータベースで引き続き動作するように、2 セットのかっこ "((0))" を想定するようにアプリケーションを変更します。

詳細

列の既定値を表示する方法: 以下の 2 つの方法のいずれかを使用すると、列に対して現在構成されている既定値を表示することができます。

方法 1: SQL Server Management Studio を使用する:

  1. オブジェクト エクスプローラーで、既定値を確認する列が含まれるテーブルを右クリックし、[デザイン] をクリックしてテーブル デザイナーでテーブルを開きます。

  2. 既定値を確認する列を選択します。

  3. [列のプロパティ] タブで、以下の図に示す "既定値またはバインド" プロパティで既定値を確認します。




方法 2: 以下のいずれかのシステム ビューを使用します。

  • sys.default_constraints - "Definition" 列を使用して必要な情報を取得します。

  • sys.syscomments - このビューの "Text" 列を使用して必要な情報を取得します。
    注: この SQL Server 2000 のシステム テーブルは、下位互換性のためのビューとして追加されています。代わりに、最新の SQL Server のシステム ビューを使用することをお勧めします。同等のシステム ビューまたはビューについては、下記の「関連情報」のリンクを参照してください。

関連情報


ヘルプを表示

スキルを磨く
トレーニングの探索
新機能を最初に入手
Microsoft Insider に参加する

この情報は役に立ちましたか?

言語の品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?

ご意見をいただきありがとうございます。

×