RUS  ENG 

DECLARE sql

Страницы: 1
RSS
DECLARE sql
 
Подскажите пожалуйста, почему не получается выполнить следующий запрос

DECLARE @t1 float, @gf float;
SET @t1 = 123;set @gf =[Расчетная нагрузка на отопление, Гкал/ч]/@t1;
sel ect
sys, @gf
fr om [тnev_term]
where typeid =3

Ответ:Type mismatch in expression.

Либо если писать


set @gf =[Расчетная нагрузка на отопление, Гкал/ч];

Ответ будет: Internal error: unpack value vt(1).
 
Здесь:
Код
set @gf =[Расчетная нагрузка на отопление, Гкал/ч]/@t1

Вы пытаетесь присвоить вещественной переменной значение строковой константы "Расчетная нагрузка на отопление, Гкал/ч", поделённой на значение из переменной t1. Строку нельзя поделить на число.

Здесь:
Код
set @gf =[Расчетная нагрузка на отопление, Гкал/ч];

происходит попытка присвоить вещественной переменной значение строковой константы. Сделаем, чтобы выдавалось похожее сообщение о несоответствии типов.
 
Мне нужно провести некоторые вычисления, прежде чем обновить поле запросом. Можно было бы обойтись и без этого, но это будет огромная формула, в которой потом будет долго разбираться, и я хотел чтобы промежуточные значения записывались в эти переменные. Чтобы это потом можно было бы прочитать. Я не могу ни где найти рабочий пример.
 
Тут есть "но":
Если промежуточные расчёты сохраняются в переменных, то все вычисления и последующее обновление касаются одного какого-то объекта и при их выполнении должен быть известен какой-то Sys (его значение)
В то время как запрос с формулой может выполняться разом для всех объектов слоя или подмножества объектов, определяемых условием.

Если с переменными, то пример таков:
Код
DECLARE @ElemID int, @t1 float, @gr float;
SET @ElemID = <какой-то Sys>;
SET @t1 = 123;
SET @gr = SELECT [Расчетная нагрузка на отопление, Гкал/ч]/@t1 FROM [тnev_term] WHERE Sys=@ElemID;
UPDATE [тnev_term] SET <какое-то поле>=@gr WHERE Sys=@ElemID;
 
Спасибо! Теперь начинаю понимать.
Страницы: 1