Ознаки
Розглянемо такий сценарій:
-
У вас є комп'ютер, на якому інстальовано Microsoft SQL Server 2012.
-
У вас є запит, який містить оператор Case у операторі Select , і оператор Case у групі за заявою.
-
У двох заявах про регістр обчислюється NULL-значення.
-
Ви запускаєте запит.
У цьому сценарії з'являється таке повідомлення про помилку:
MSG 8120, рівень 16, стан 1, рядок 3Column "<ім'я стовпця>" неприпустимий у списку Select, оскільки він не міститься в агрегатній функції або групі за речення.
Наприклад, ви запускаєте такий запит: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 У запиті оператор "коли 1 = 2, а потім T1. Col1 ще 10" обчислює 10. Коли ви замінюєте "10" за допомогою NULL, ця проблема виникає.Примітка.Ця проблема не виникає, коли ви видаляєте будь-який із заяв про інцидент із інструкції Select або з групи за заявою.
Спосіб вирішення
Після застосування виправлення потрібно ввімкнути позначку трасування, щоб виконати виправлення. Зверніться до служби підтримки Microsoft, коли потрібно додати це виправлення.
Ця проблема була спочатку зафіксоване в цьому сукупному оновленні сервера SQL Server.
Сукупне оновлення 6 для SQL Server 2012 SP1 /en-us/help/2874879
Кожне нове Сукупне оновлення для SQL Server містить усі поточні виправлення та всі виправлення системи безпеки, які були включені до попереднього сукупного оновлення. Ознайомтеся з найновішими сукупними оновленнями для сервера SQL Server:
Стан
Корпорація Майкрософт підтвердила, що це проблема в продуктах Microsoft, перелічених у розділі "застосовується до".