Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка в update from select  [new]
Nechto
Member

Откуда:
Сообщений: 829
Здравствуйте.

Подскажите пожалуйста что здесь не так?

UPDATE [dbo].[TEMP] 
SET PIPE_ID = IsNULL(F.PIPE_ID, (select max(PIPE_ID)+1 from [TestDB].[dbo].[TEMP]))

      FROM [dbo].[TEMP]
     INNER JOIN [dbo].[TEMP] F 
	 ON ((F.NAME = 'KUST' OR F.NAME2 = 'KUST') OR (F.NAME = 'N1' OR F.NAME2 = 'N1'))
       AND F.SERV_ID = 1
       AND F.Diam = 20
       AND [dbo].[TEMP].MSLINK = F.MSLINK


Почему то ещу не нравится этот скрипт (select max(PIPE_ID)+1 from [TestDB].[dbo].[TEMP]), если написать вместо этого скрипта к примеру 101, то запрос отлично обновляет.

А так кричит
автор
Внимание! Значение NULL исключено в агрегатных или других операциях SET


К сообщению приложен файл. Размер - 13Kb
28 май 14, 14:47    [16085703]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nechto
А так кричит
автор
Внимание! Значение NULL исключено в агрегатных или других операциях SET

И что непонятного в сообщении ?
28 май 14, 14:49    [16085722]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Nechto
Member

Откуда:
Сообщений: 829
Блин, что то я гоню. Вопрос закрываю.
28 май 14, 15:00    [16085807]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Nechto
Member

Откуда:
Сообщений: 829
Чтобы не плодить темы, продолжу в этой.

Попробую сначала объяснить что я хочу сделать. По сути задача заключается в заполнение поля PIPE_ID значениями группирующие группу строк исходя от условия.
На картинке, сверху имеется запрос, в котором как раз выполняется выборка и update массива строк удовлетворяющего условию.

В общем на картинке снизу имеется таблица, которая показывает данные которые подтянутся в INNER JOIN исходя из условия.
В данной таблице имеется одно нулевое PIPE_ID, которое после выполнения запроса заполниться значением "2", а мне надо чтобы оно заполнилось "1" поскольку эта запись по подает в группу с двумя записями. Как это можно сделать в этом же запросе.

К сообщению приложен файл. Размер - 26Kb
28 май 14, 18:25    [16087443]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nechto
Попробую сначала объяснить что я хочу сделать.

Рекомендации по формлению сообщений п.4 и п.6
28 май 14, 18:28    [16087456]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
user89
Member

Откуда:
Сообщений: 2083
Nechto,

попробуйте еще такой вариант 16080129
28 май 14, 21:24    [16088206]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Nechto
Member

Откуда:
Сообщений: 829
WITH то что надо.

Только вот не пойму почему переменная объявленная в WITH Q, доступна только в одном запросе, а в следующем уже кричит ошибку "Недопустимое имя объекта "Q""

WITH Q AS (ЗАПРОС)

-- Здесь объект Q доступен
UPDATE таблица
 ...
 FORM Q

-- Уже не доступен
SELECT * FROM Q
29 май 14, 13:33    [16091072]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nechto
Только вот не пойму почему переменная объявленная в WITH Q, доступна только в одном запросе, а в следующем уже кричит ошибку "Недопустимое имя объекта "Q""

Потому что это не переменная
29 май 14, 13:34    [16091083]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
iap
Member

Откуда: Москва
Сообщений: 47047
Nechto,

это часть UPDATEа!
29 май 14, 13:35    [16091104]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Nechto
Member

Откуда:
Сообщений: 829
А альтернатива какая нибудь есть?
29 май 14, 13:41    [16091175]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nechto
А альтернатива какая нибудь есть?

Альтернатива чему ?
Хочу один раз написать текст запроса, а его результат использовать где-угодно ?
29 май 14, 13:44    [16091216]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Nechto
Member

Откуда:
Сообщений: 829
Ну да, только без использования курсора
29 май 14, 13:48    [16091257]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nechto
Ну да, только без использования курсора

Запрос, текст которого хранится на сервере и доступен для запросов, называется представлением/view-ом
29 май 14, 13:53    [16091295]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
user89
Member

Откуда:
Сообщений: 2083
Nechto,

показываю

К сообщению приложен файл. Размер - 19Kb
29 май 14, 13:54    [16091303]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Nechto
Member

Откуда:
Сообщений: 829
Товарищ user89
Данный пример я уже рассмотрел, прочтите несколько постов выше.


VIEW не подойдёт постольку
WITH Q AS (ЗАПРОС)
Имеет входящие параметры.
29 май 14, 15:51    [16092311]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nechto
VIEW не подойдёт постольку
WITH Q AS (ЗАПРОС)

Имеет входящие параметры.

А что такое "входящие параметры" ? Еще один "самодельный" термин ?
29 май 14, 15:53    [16092330]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Nechto
Member

Откуда:
Сообщений: 829
Вроде того :)

WITH Q AS (select * FROM table where id = @IDs)
29 май 14, 16:20    [16092629]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка в update from select  [new]
Glory
Member

Откуда:
Сообщений: 104760
Nechto
WITH Q AS (select * FROM table where id = @IDs)

И откуда же в переменную @IDs попадет значение ?
29 май 14, 16:21    [16092638]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить