現象
たとえば次のようなシナリオを考えてみます。
- Microsoft SQL Server 2012 がインストールされているコンピューターがあります。
- SELECT ステートメントの CASE ステートメントと GROUP BY ステートメントの CASE ステートメントを含むクエリがあります。
- 2 つの CASE ステートメントは NULL と評価されます。
- クエリを実行します。
このとき、次のエラー メッセージが表示されます。
注
メッセージ 8120、レベル 16、状態 1、行 3
列 '<column name>' は、集計関数または GROUP BY 句に含まれていないため、選択リストで無効です。
たとえば、次のクエリを実行します。データベースの作成テスト
行く
テストを使用する
行く
create table tvt ( v1t binary(1) null)
create table tln (ln numeric(5) not null)
行く
選択
case
1=2 の場合、t1.col1
else 10
終わり
case
t1.col1 = 2 の場合、t1.col2
end
from (
t2.v1t を col1 として選択し、10 を col2 として選択します
tvt t2 から
) t1
グループ化
case
1=2 の場合、t1.col1
else 10
終わり
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 /en-us/help/2874879 の累積的な更新プログラム 6
SQL Server 用の累積的な更新プログラムについて
SQL Serverの各新しい累積的な更新プログラムには、すべての修正プログラムと、以前の累積的な更新プログラムに含まれていたすべてのセキュリティ修正プログラムが含まれています。 SQL Serverの最新の累積的な更新プログラムを確認してください。
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。