Symptomy
Rozpatrzmy następujący scenariusz:
-
Masz zainstalowany na komputerze program Microsoft SQL Server 2012.
-
Kwerenda zawierająca instrukcję Case w instrukcji SELECT i instrukcji Case w instrukcji Group by .
-
Wynikiem dwóch instrukcji Case jest wartość null.
-
Uruchomienie zapytania.
W tym scenariuszu jest wyświetlany następujący komunikat o błędzie:
Msg 8120, poziom 16, stan 1, 3Column wiersza "<Nazwa kolumny>" jest nieprawidłowa na liście Wybierz, ponieważ nie jest ona zawarta w funkcji agregującej ani w klauzuli Group by.
Na przykład uruchom następujące zapytanie:create database testgouse testgocreate table tvt ( v1t binary(1) null)create table tln (ln numeric(5) not null)goselectcase when 1=2 then t1.col1else 10end,casewhen t1.col1 = 2 then t1.col2endfrom (select t2.v1t as col1, 10 as col2 from tvt t2) t1group by case when 1=2 then t1.col1else 10end,casewhen t1.col1 = 2 then t1.col2endgo W kwerendzie instrukcja "gdy 1 = 2, a następnie T1. Kol1 else 10" daje w wyniku wartość 10. Po zamienieniu "10" przy użyciu wartości NULL ten problem występuje.UwagaTen problem nie występuje po usunięciu instrukcji Case z instrukcji SELECT lub instrukcji Group by .
Rozwiązanie
Po zastosowaniu tej poprawki musisz włączyć flagę śledzenia, aby działała poprawka. Skontaktuj się z pomocą techniczną firmy Microsoft, gdy chcesz zastosować tę poprawkę.
Ten problem został po raz pierwszy rozwiązany w poniższej zbiorczej aktualizacji programu SQL Server.
Zbiorcza aktualizacja 6 dla programu SQL Server 2012 z dodatkiem SP1 /en-us/help/2874879
Każda nowa Zbiorcza aktualizacja programu SQL Server zawiera wszystkie poprawki i wszystkie poprawki zabezpieczeń uwzględnione w poprzedniej aktualizacji zbiorczej. Zapoznaj się z najnowszymi aktualizacjami zbiorczymi dla programu SQL Server:
Stan
Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji "dotyczy".