Ошибка при вставке во временную таблицу - PullRequest
0 голосов
/ 04 марта 2011

У меня есть запрос, но я получаю ошибку:

Запрос:

INSERT #tableN (ID,NAME,Value) 
  SELECT 1 , 'subject', SUM(subject), 2, 'age', SUM(age), 
         3, 'sex', SUM(sex), 4, 'test_time', SUM(test_time) 
  FROM taleParker

Я получаю следующую ошибку:

Msg 203, Уровень 16, Состояние 2, Строка 61
Имя «ВСТАВИТЬ #tableN (ИД, ИМЯ, Значение) ВЫБРАТЬ 1,« субъект », СУММА (субъект), 2,« возраст », СУММА (возраст), 3,« пол », SUM (пол), 4, 'test_time', SUM (test_time), 'не является допустимым идентификатором.

Ответы [ 2 ]

2 голосов
/ 04 марта 2011
INSERT #tableN (ID,NAME,Value) 
  SELECT 1, 'subject', SUM(subject) FROM taleParker  UNION ALL
  SELECT 2, 'age', SUM(age) FROM taleParker  UNION ALL
  SELECT 3, 'sex', SUM(sex) FROM taleParker UNION ALL 
  SELECT 4, 'test_time', SUM(test_time) FROM taleParker
2 голосов
/ 04 марта 2011

Ваша временная таблица состоит из трех столбцов - но у вашей SELECT для вставки есть намного больше ....

Вам нужно разбить это на несколько INSERTs:

INSERT #tableN (ID,NAME,Value) 
  SELECT 1 , 'subject', SUM(subject)
  FROM taleParker

INSERT #tableN (ID,NAME,Value) 
  SELECT 2, 'age', SUM(age)
  FROM taleParker

INSERT #tableN (ID,NAME,Value) 
  SELECT 3, 'sex', SUM(sex)
  FROM taleParker

INSERT #tableN (ID,NAME,Value) 
  SELECT 4, 'test_time', SUM(test_time) 
  FROM taleParker

Обновление: в SQL Server 2008 вы можете иметь:

INSERT #tableN (ID,NAME,Value) 
   VALUES(1, 'subject', 1), (2, 'age', 42), (3, 'sex', 'M') .....

, но тогда вам придется использовать фиксированные значения - не SELECT выражения

Обновление №2: , если вы хотите использовать значение SUM(...), вам нужно сначала получить их в переменные:

DECLARE @SumSubj INT, @SumAge INT, @SumSex INT, @SumTest INT

SELECT @SumSubj = SUM(subject), @SumAge = SUM(age),
       @SumSex = SUM(sex), @SumTest = SUM(test_time)
FROM taleParker

INSERT #tableN (ID,NAME,Value) 
   VALUES(1, 'subject', @SumSubj), (2, 'age', @SumAge), (3, 'sex', @SumSex) .....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...