メイン コンテンツへスキップ
サポート
Microsoft アカウントでサインイン
サインインまたはアカウントを作成してください。
こんにちは、
別のアカウントを選択してください。
複数のアカウントがあります
サインインに使用するアカウントを選択してください。

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

現象

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

  • Microsoft SQL Server 2008 R2 または Microsoft SQL Server 2012 のテーブルに datetimeoffset データ型の列が含まれています。

  • Datetimeoffset列でインデックスを作成します。

  • Datetimeoffsetデータ型をsmalldatetimeデータ型に変換するには、 style引数を指定せずにCASTまたはconvert関数を使用するか、 style引数の値が0であるかを指定します。

  • CASTまたはCONVERT関数の結果は、transact-sql クエリのフィルターで使用されます。

  • Transact-sql クエリを実行します。

このシナリオでは、フィルターが正しく動作しないため、クエリによって返される結果が正しくありません。 たとえば、"Date" という名前の datetimeoffset 列には、次の値が含まれているとします。

  • 2011-05-21 23:00:00 -01:00

  • 2011-05-21 23:00:00 +00:00

  • 2011-05-21 23:00:00 +01:00

次のクエリを実行します。

SELECT Date FROM TestTable WHERE CAST(Date AS smalldatetime)= '2011-05-21 23:00:00'

クエリの結果は、1つの行のみを返します。 ただし、予期される結果では、3つのすべての値に対して行を返す必要があります。

解決方法

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

SQL Server 2012

この問題の修正プログラムは、SQL Server 2012 の累積更新プログラム3で最初にリリースされました。この累積的な更新プログラムパッケージの詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。

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

2692828 SQL Server 2012 がリリースされた後にリリースされた SQL Server 2012 ビルド Sql server 2012 のインストールには、SQL Server 2012 修正プログラムを適用する必要があります。

SQL Server 2008 R2 Service Pack 2

この問題の修正プログラムは、SQL Server 2008 R2 Service Pack 2 の累積更新プログラム1で最初にリリースされました。この累積的な更新プログラムパッケージの入手方法の詳細については、次の記事番号をクリックして、Microsoft サポート技術情報の記事を参照してください。

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

2730301 SQL Server 2008 R2 Service Pack 2 がリリースされた後にリリースされた SQL Server 2008 R2 ビルド

SQL Server 2008 R2 SP1

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

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

2567616 SQL Server 2008 R2 SP1 がリリースされた後にリリースされた SQL Server 2008 R2 ビルド

詳細情報

この問題を再現するには、次の手順を実行します。

  1. Datetimeoffset列を含むテーブルを作成し、いくつかのレコードを挿入するには、次のクエリを実行します。CREATE TABLE #TestTimeZones (dto datetimeoffset(0)); GO INSERT INTO #TestTimeZones(dto) VALUES ('2011-05-21 23:00:00 -01:00'), ('2011-05-21 23:00:00 +00:00'), ('2011-05-21 23:00:00 +01:00'); GO

  2. 次のクエリを実行して、返された結果で3つのすべての値が正しく表示されていることを確認できます。DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withoutIndex FROM #TestTimeZones WHERE CAST(dto AS smalldatetime)=@t;

  3. "Dto" 列でインデックスを作成して、同じクエリを繰り返すには、次のクエリを実行します。CREATE INDEX IX_testTimeZones_Dto ON #TestTimeZones(dto); GO -- Repeat the same query DECLARE @t smalldatetime = '2011-05-21 23:00:00' SELECT dto AS withIndex FROM #TestTimeZones WHERE CAST(dto A smalldatetime)=@t; GO

  4. 手順2でクエリをもう一度実行します。 今回は、クエリは1つの行のみを返します。

  5. 次のクエリを実行して、インデックスと作成したテーブルを削除します。DROP INDEX IX_testTimeZones_Dto ON #TestTimeZones; GO DROP TALBE #TestTimeZones; GO

参照情報

CAST 関数と CONVERT 関数の詳細については、次の MSDN web サイトを参照してください。

SQL Server の CAST 関数と CONVERT 関数に関する一般的な情報

状態

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。

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

言語の品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?
[送信] を押すと、Microsoft の製品とサービスの改善にフィードバックが使用されます。 IT 管理者はこのデータを収集できます。 プライバシーに関する声明。

フィードバックをいただき、ありがとうございます。

×