Příznaky
Zvažte následující scénář:
-
Máte počítač s nainstalovaným Microsoft SQL serverem 2012.
-
Máte dotaz, který obsahuje příkaz case v příkazu Select a příkaz case v příkazu Seskupit podle .
-
Dva příkazy case vyhodnotí na hodnotu null.
-
Spustíte dotaz.
V tomto scénáři se zobrazí následující chybová zpráva:
Msg 8120, úroveň 16, stát 1, řádek 3Column ' <název sloupce> ' je v seznamu Select neplatný, protože není obsažen v agregační funkci ani v klauzuli Group by (seskupit podle).
Spustíte například následující dotaz: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 V dotazu je výraz "když 1 = 2 then T1. Sloupec1 else 10" vyhodnocen jako 10. Tento problém nastane, když nahradíte "10" pomocí NULL.PoznámkaTento problém nenastane, když z příkazu Select nebo z příkazu Group by odeberete některou z těchto možností :
Řešení
Po použití opravy je nutné povolit příznak trasování, aby oprava hotfix fungovala. Pokud potřebujete tuto opravu, kontaktujte prosím podporu Microsoftu.
Tento problém byl poprvé opraven následující kumulativní aktualizací SQL serveru.
Kumulativní aktualizace 6 pro SQL Server 2012 SP1 /en-us/help/2874879
Každá nová kumulativní aktualizace pro SQL Server obsahuje všechny opravy hotfix a všechny opravy zabezpečení, které byly součástí předchozí kumulativní aktualizace. Podívejte se na nejnovější kumulativní aktualizace SQL serveru:
Stav
Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části Informace v tomto článku jsou určeny pro produkt.