SQL:update временной таблицы #557556


#0 by Fram
А разве нельзя делать update временной таблицы? Вот такая команда не проходит: update #t1 set Uniq = 0
#1 by Fram
ругается так: "Недопустимое имя столбца "Uniq".
#2 by Fram
столбец точно есть
#3 by ДенисЧ
не верю.
#4 by Fram
вот предыдущая команда select RowID, Uniq, CustomerID, CalcDate, CaseNo, VIN, ModelCode into @t1 from Calcs where LoadDate between '20110529' and '20110605 23:59:59'
#5 by Fram
пардон не @t1 а #t1
#6 by Fram
это я через declare пытался
#7 by ДенисЧ
покажи select top 0 from #t1
#8 by МихаилМ
все конечно догадалить, о каком скл  идет речь. update #t1 set [Uniq] = 0 должно помочь
#9 by Fram
спс, помогло. вопрос почему?
#10 by МихаилМ
надо быть большим ламером чтобы поле назвать Uniq впрочем вы не одиноки (
#11 by Fram
было названо до меня
#12 by Fram
а разве это слово зарезервировано?
#13 by МихаилМ
нет, но возможно есть функция также могут  влиять настройки типа set_ansi поищите в сисобжект
#14 by Fram
ладно, проехали.. теперь другая проблема    ТекстЗапроса = "    |select RowID, LoadDate, Uniq, Uniq10, " + Поля + " into #t1 from Calcs    |where (CalcDate between @datefrom1 and @dateto) or (LoadDate between @datefrom and @dateto)    |";    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "@datefrom1", "'" + Формат(НачПериода - 60*86400, "ДФ=ггггММдд") + "'");    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "@datefrom", "'" + Формат(НачПериода, "ДФ=ггггММдд") + "'");    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "@dateto", "'" + Формат(КонПериода, "ДФ=ггггММдд") + " 23:59:59'");    Connection.Execute(ТекстЗапроса);    Пока ТекПериод <= КонПериода Цикл            ...                    Connection.Execute("delete from #ids");        Connection.Execute("bulk insert #ids from 'c:facturacustids.txt'");                ТекстЗапроса = "        |update #t1 set Uniq10 = Uniq        |where LoadDate between @datefrom and @dateto and (not CustomerID in (select c1 from #ids))        |";        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "@datefrom", "'" + Формат(ТекПериод, "ДФ=ггггММдд") + "'");        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "@dateto", "'" + Формат(ТекПериод, "ДФ=ггггММдд") + " 23:59:59'");                Рез = Connection.Execute(ТекстЗапроса);                ТекстЗапроса = "        |select RowID, " + Поля + " from #t1        |where LoadDate between @datefrom and @dateto and (CustomerID in (select c1 from #ids))        |order by CalcDate        |";        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "@datefrom", "'" + Формат(ТекПериод, "ДФ=ггггММдд") + "'");        ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "@dateto", "'" + Формат(ТекПериод, "ДФ=ггггММдд") + " 23:59:59'");                Рез = Connection.Execute(ТекстЗапроса);                н = 0;                Пока НЕ Рез.EOF Цикл                        //ОбработкаПрерыванияПользователя;                        н = н + 1;            Если н % 100 = 0 Тогда                Состояние("" + н + " : " + Рез.Fields("CalcDate").Value);            КонецЕсли;            Для каждого Поле Из Зап Цикл                Зап[Поле.Ключ] = Рез.Fields(Поле.Ключ).Value            КонецЦикла;                        ИмяТабл = ?(Зап.CalcDate - 30*86400 < НачПериода - 60*86400, "Calcs", "#t1");                НомЗап = Формат(Рез.Fields("RowID").Value, "ЧГ=0");            Уник = ?(СокрЛП(Зап.VIN) = "" ИЛИ Зап.VIN = null, "1", ЭтоНоваяКалькуляция10(Зап, ИмяТабл));                        Connection.Execute("update #t1 set Uniq10 = " + Уник + " where RowID = " + НомЗап);                        Если ИмяТабл = "Calcs" Тогда                Connection.Execute("update Calcs set Uniq10 = " + Уник + " where RowID = " + НомЗап);            КонецЕсли;                        Рез.MoveNext                    КонецЦикла;                Сообщить("" + ТекПериод + " - " + КолвоКлючей + " ключей, " + н + " расчетов");                ТекПериод = ТекПериод + 86400;        КонецЦикла; в строке Connection.Execute("update #t1 set Uniq10 = " + Уник + " where RowID = " + НомЗап); ругается на недопустимый объект #t1 вроде сеанс нигде не обрывается..
#15 by Fram
при выборке из #t1 на объект не ругается, но при обходе результата этой выборки уже ругается
#16 by МихаилМ
издиваетесь.. ? как можно обходить выборку "update" ?
#17 by Fram
не... сначала делаю выборку из #t1 и во время обхода результата вношу в #t1 изменения
#18 by Fram
попробую покомпактнее изложить.. ТекстЗапроса = "       |select RowID, " + Поля + " from #t1       |where LoadDate between @datefrom and @dateto and (CustomerID in (select c1 from #ids))       |order by CalcDate       |";       ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "@datefrom", "'" + Формат(ТекПериод, "ДФ=ггггММдд") + "'");       ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "@dateto", "'" + Формат(ТекПериод, "ДФ=ггггММдд") + " 23:59:59'");             Рез = Connection.Execute(ТекстЗапроса);             н = 0;             Пока НЕ Рез.EOF Цикл           Connection.Execute("update #t1 set Uniq10 = " + Уник + " where RowID = " + НомЗап); //вот тут ругается на недопустимы объект                 КонецЦикла;
#19 by МихаилМ
тогда смотрите тип курсора выборки
#20 by Fram
прошу прощения, но сия фраза мне не очень понятна "тип курсора выборки"
#21 by МихаилМ
читаете доки о свойствах объектов коннекшн и комманд.
#22 by Fram
Тип переменной Рез имеется ввиду?
#23 by Fram
+ COMОбъект само собой
#24 by Fram
коннекшн перестает видеть ранее созданные временные таблицы. почему?
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С