現象
たとえば次のようなシナリオを考えてみます。
- Microsoft SQL Server 2012 がインストールされているコンピューターがあります。
- SELECT ステートメントに CASE ステートメント、GROUP BY ステートメントに CASE ステートメントを含むクエリがあります。
- 2 つの CASE ステートメントは NULL として評価されます。
- クエリを実行します。
このとき、次のエラー メッセージが表示されます。
注
メッセージ 8120、レベル 16、状態 1、行 3
列 '<column name>' は、集計関数または GROUP BY 句のいずれにも含まれていないため、選択リストで無効です。
たとえば、次のクエリを実行します。create database test
行く
テストを使用する
行く
テーブルの作成 tvt ( v1t binary(1) null)
テーブル tln の作成 (ln numeric(5) not null)
行く
選択
case
when 1=2 then t1.col1
それ以外の場合は 10
end,
case
t1.col1 = 2 の場合、t1.col2
end
from (
SELECT t2.v1t as col1, 10 as col2
TVT T2 から
) t1
グループ化
case
when 1=2 then t1.col1
それ以外の場合は 10
end,
case
t1.col1 = 2 の場合、t1.col2
end
go クエリでは、ステートメント "when 1=2 then t1.col1 else 10" は 10 と評価されます。 NULL を使用して "10" を置き換えると、この問題が発生します。
注: この問題は、SELECT ステートメントまたは GROUP BY ステートメントからいずれかの CASE ステートメントを削除しても発生しません。
解決策
修正プログラムを適用した後、修正プログラムを機能させるには、トレース フラグを有効にする必要があります。 この修正プログラムを適用する必要がある場合は、Microsoft サポートにお問い合わせください。
この問題は、次の SQL Server の累積的な更新プログラムで最初に修正されました。
SQL Server 2012 SP1 の累積的な更新プログラム 6 /en-us/help/2874879
SQL Server 用の累積的な更新プログラムについて
SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。