KB2380361 - 修正: テーブルに非決定的な計算列が含まれている場合、SQL Server 2008 または SQL Server 2008 R2 で "sp_createstats" ストアド プロシージャを実行するとエラー メッセージが表示される

適用先
SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Standard SQL Server 2008 Standard Edition for Small Business SQL Server 2008 Workgroup SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Workgroup SQL Server 2008 R2 Standard Edition for Small Business

Microsoft では、Microsoft SQL Server 2008 および Microsoft SQL Server 2008 R2 の修正を 1 つのダウンロード可能なファイルとして配布しています。 修正は累積的であるため、各新しいリリースには、以前の SQL Server 2008 または SQL Server 2008 R2 の修正プログラム リリースに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。

現象

たとえば次のようなシナリオを考えてみます。

  • SQL Server 2008 または SQL Server 2008 R2 データベースに非決定的な計算列を含むテーブルを作成します。 たとえば、非決定的な計算列を含むテーブルを作成するには、次のステートメントを実行します。CREATE TABLE [dbo]。[T1](
            [生年月日]DATE,
            [年齢]AS (FLOOR(DATEDIFF(DAY,[DateOfBirth],GETDATE())/(365.0))))GO 注: このステートメントでは、GETDATE 関数は非決定論的です。

  • sp_createstats ストアド プロシージャを実行すると、パフォーマンスが向上します。

    注: sp_createstats ストアド プロシージャは、データベース内の対象となる列の単一列の統計を作成します

このシナリオでは、sp_createstats ストアド プロシージャは失敗します。 そのため、一部の適格列の統計が作成されていない可能性があります。 さらに、以下のエラー メッセージが表示されます。

注

メッセージ 2729、レベル 16、状態 1、行 1

テーブル 'dbo.t1' の列 'Age' は、非決定的であるため、インデックスまたは統計、またはパーティション キーとして使用できません。

原因

この問題は、sp_createstats ストアド プロシージャが非決定的な計算列をスキップしないために発生します。

解決策

累積的な更新プログラムの情報

SQL Server 2008 Service Pack 1

この問題の修正プログラムは、SQL Server 2008 Service Pack 1 の累積的な更新プログラム 11 で最初にリリースされました。 この累積的な更新プログラム パッケージの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。

2413738 SQL Server 2008 Service Pack 1 の累積的な更新プログラム パッケージ 11
注 : ビルドは累積的であるため、新しくリリースされたパッケージには、それ以前の SQL Server 2008 更新プログラムのリリースに含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれています。 マイクロソフトでは、この修正プログラムを含む最新の修正プログラム リリースを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。

970365 SQL Server 2008 Service Pack 1 以降にリリースされた SQL Server 2008 ビルドMicrosoft SQL Server 2008 修正プログラムは、特定の SQL Server Service Pack 用に作成されます。 SQL Server 2008 Service Pack 1 のインストールには、SQL Server 2008 Service Pack 1 修正プログラムを適用する必要があります。 既定では、1 つの SQL Server Service Pack で提供されているすべての修正プログラムは、次の SQL Server Service Pack に含まれています。

SQL Server 2008 Service Pack 2

この問題の修正プログラムは、SQL Server 2008 Service Pack 2 の累積的な更新プログラム 1 で最初にリリースされました。 この累積的な更新プログラム パッケージの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。

2289254 SQL Server 2008 Service Pack 2 の累積的な更新プログラム 1 注: ビルドは累積的であるため、新しくリリースされた各修正プログラムには、以前の SQL Server 2008 更新プログラムのリリースに含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれています。 この修正プログラムが含まれている最新リリースの修正の適用を検討することを推奨します。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。

2402659 SQL Server 2008 Service Pack 2 以降にリリースされた SQL Server 2008 ビルド

SQL Server 2008 Service Pack 2

この問題の修正プログラムは、SQL Server 2008 Service Pack 2 の累積的な更新プログラム 2 で最初にリリースされました。 この累積的な更新プログラム パッケージの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。

2467239 SQL Server 2008 Service Pack 2 の累積的な更新プログラム パッケージ 2 注: ビルドは累積的であるため、新しくリリースされた各修正プログラムには、以前の SQL Server 2008 更新プログラムのリリースに含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれています。 マイクロソフトでは、この修正プログラムを含む最新の修正プログラム リリースを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。

2402659 SQL Server 2008 Service Pack 2 SQL Server以降にリリースされた SQL Server 2008 ビルドは、特定の SQL Server Service Pack 用に作成されます。 SQL Server 2008 Service Pack 2 のインストールには、SQL Server 2008 Service Pack 2 修正プログラムを適用する必要があります。 既定では、1 つの SQL Server Service Pack で提供されているすべての修正プログラムは、次の SQL Server Service Pack に含まれています。

SQL Server 2008 R2

この問題の修正プログラムは、累積的な更新プログラム 4 で最初にリリースされました。 SQL Server 2008 R2 用のこの累積的な更新プログラム パッケージを入手する方法の詳細については、以下のサポート技術情報番号をクリックしてください。

2345451 SQL Server 2008 R2 の累積的な更新プログラム パッケージ 4 (注: ビルドは累積的であるため、新しくリリースされた修正プログラムには、以前のリリースの SQL Server 2008 R2 の修正プログラムに含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれています)。 この修正プログラムが含まれている最新リリースの修正の適用を検討することを推奨します。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。

981356 SQL Server 2008 R2 のリリース以降にリリースされた SQL Server 2008 R2 のビルド

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

参考資料

決定論的関数と非決定論的関数の詳細については、次の MSDN (Microsoft Developer Network) Web サイトを参照してください。

決定性関数と非決定性関数に関する一般的な情報 sp_createstatsストアド プロシージャの詳細については、次の MSDN Web サイトを参照してください。

"sp_createstats" Transact-SQL ストアド プロシージャに関する一般的な情報 計算列の詳細については、次の MSDN Web サイトを参照してください。

計算列に関する一般的な情報SQL Server の増分サービス モデルの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。

935897 報告された問題に対する修正プログラムを提供する SQL Server チームの増分サービス モデル (ISM) について

SQL Server の更新プログラムの命名方式の関連情報を参照するには、以下のサポート技術情報番号をクリックしてください。

822499 Microsoft SQL Server ソフトウェア更新プログラム パッケージの新しい命名スキーマソフトウェア更新プログラムに関する用語の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。

824684 マイクロソフトのソフトウェアの更新で使用される一般的な用語の説明