|
v7: Выборка из временной таблицы прямой запрос | ☑ | ||
---|---|---|---|---|
0
art_id
05.04.13
✎
09:42
|
Есть простенький запрос.
"|SET NOCOUNT ON | |SELECT | $СпецификацияСтроки.Элемент [Элемент $Справочник.Номенклатура], | SUM($СпецификацияСтроки.Норма) Норма |INTO #ТаблицаСпецификаций |FROM $ДокументСтроки.Спецификация AS СпецификацияСтроки With (NOLOCK) |WHERE ($СпецификацияСтроки.ВидЭлемента = :ВидЭлементаПолуфабрикат) | AND (СпецификацияСтроки.IDDOC IN (Select Val FROM #СписокСпецификаций)) |GROUP BY | $СпецификацияСтроки.Элемент | |SET NOCOUNT OFF | |Select T.Элемент From #ТаблицаСпецификаций AS T"; Выдает ошибку Недопустимое имя столбца "Элемент" Если выбрать все поля из ВТ, то все ок. Подскажите ЧЯДНТ? |
|||
1
ДенисЧ
05.04.13
✎
09:44
|
А зачем ты приводишь тип при выгрузке в временную таблицу?
|
|||
2
art_id
05.04.13
✎
09:46
|
(1)Со старого осталось запроса. Но даже без приведения типа ошибку выдает
|
|||
3
viktor_vv
05.04.13
✎
09:49
|
Надо перед выполнением уничтожать временную таблицу, если она есть.
|
|||
4
viktor_vv
05.04.13
✎
09:50
|
На самом деле у тебя ошибка при записи во временную таблицу. Но показывается только последняя.
|
|||
5
art_id
05.04.13
✎
09:50
|
(3)Пробовал, не помогает.
Причем в инете найти не могу где пример выборки есть из ВТ |
|||
6
art_id
05.04.13
✎
09:51
|
(4)какая ошибка? как ее поймать?
|
|||
7
viktor_vv
05.04.13
✎
09:52
|
Ну тогда попробуй отдельным запросом во временную, через Выполнить(), а другим уже выгребай оттуда.
|
|||
8
Ёпрст
05.04.13
✎
09:53
|
(0) выкини типизация
|
|||
9
Ёпрст
05.04.13
✎
09:53
|
тиризацию
|
|||
10
МихаилМ
05.04.13
✎
09:54
|
(0)
вот и посмотрите, как у Вам в ВТ поля называютя. очевидно, что полей с осмысленными названиями быть не должно, тк имена полей создщаютя $ДокументСтроки |
|||
11
art_id
05.04.13
✎
09:58
|
Спасибо всем. Убрал типизацию. Первый запрос через Выполнить() поместил, вторым выбрал. Получилось.
|
|||
12
viktor_vv
05.04.13
✎
09:58
|
(6) См (7) насчет отдельного запроса.
Рез = глЗапросСКЛ.Выполнить(ТекстЗапросаВремТаб); Если Рез = 0 Тогда Сообщить(глЗапросСКЛ.GetLastError()); КонецЕсли ; |
|||
13
art_id
05.04.13
✎
09:59
|
Но почему не работает в одном запросе?
|
|||
14
Ёпрст
05.04.13
✎
10:02
|
(13) go
|
|||
15
art_id
05.04.13
✎
10:09
|
(14)т.е. в начале запроса необходимо GO?
|
|||
16
viktor_vv
05.04.13
✎
10:16
|
(15) Да оно вроде и без go работает. Сейчас сделал простенький запрос подобный (0), все в одном работает нормально.
|
|||
17
art_id
05.04.13
✎
10:18
|
(16)хм, странно. Может из-за версии компоненты?
|
|||
18
viktor_vv
05.04.13
✎
10:20
|
См (10).
|SET NOCOUNT OFF | |Select * From #ТаблицаСпецификаций AS T"; И смотри в ТЗ имена столбцов. Или через отладка(1) получи текст запроса и загони в QA. Попробуй еще имя дать не Элемент, а другое какое-то. |
|||
19
art_id
05.04.13
✎
10:23
|
(18)вот именно что если делать через Select * FROM ...
То потом выдает ТЗ с нормальными именами. Сейчас попробовал через GO ТекстЗапроса = " |GO |DROP TABLE #ТаблицаСпецификаций | |SET NOCOUNT ON | |SELECT | $СпецификацияСтроки.Элемент Элемент, | SUM($СпецификацияСтроки.Норма) Норма |INTO #ТаблицаСпецификаций |FROM $ДокументСтроки.Спецификация AS СпецификацияСтроки With (NOLOCK) |WHERE ($СпецификацияСтроки.ВидЭлемента = :ВидЭлементаПолуфабрикат) | AND (СпецификацияСтроки.IDDOC IN (Select Val FROM #СписокСпецификаций)) |GROUP BY | $СпецификацияСтроки.Элемент | |SET NOCOUNT OFF |select T.Элемент [Элемент $Справочник] FROm #ТаблицаСпецификаций AS T"; Выдала ошибку Связанная инструкция не подготовлена |
|||
20
МихаилМ
05.04.13
✎
10:25
|
(19)
go - это шутка |
|||
21
Ёпрст
05.04.13
✎
10:26
|
(20) :) догадливый..
ЗЫ: на самом деле всё просто - ВыполнитьИнструкцию возвращает результат только первого запроса, хотя и обрабатывает их все. |
|||
22
art_id
05.04.13
✎
10:26
|
(20)понятно
|
|||
23
Ёпрст
05.04.13
✎
10:28
|
т.е если запрос содержит несколько конструкций (запросов), результат будет только от первой конструкции (но все запросы всё равно выполнятся)..это еще в доке было написано (вроде).
|
|||
24
МихаилМ
05.04.13
✎
10:28
|
+(21)
это относится к odbc в ole db - наоборот |
|||
25
Ёпрст
05.04.13
✎
10:30
|
поэтому, тебе и надо 2 раза выполнять - один для создания таблички, второй для выборки.
Ну и что нить типа этого воткнуть еще не мешает: |if object_id(N'tempdb..#ТаблицаСпецификаций') is not null |drop table #ТаблицаСпецификаций перед пиханием во временную табличку |
|||
26
Ёпрст
05.04.13
✎
10:31
|
(24) ага, там результат последнего возвращает.
|
|||
27
art_id
05.04.13
✎
10:32
|
(23)ну либо я в доке не увидел, либо дока какая-то другая у меня. Если есть ссылочка на документацию, поделись пжл.
(25)А не прокатит через Выполнить(), а затем ПолучитьРезультатыВ_ТЗ()? if object_id(N'tempdb..#ТаблицаСпецификаций') is not null Это я так понимаю что если ВТ существует, то удаляем. Где про это прочитать можно? |
|||
28
Ёпрст
05.04.13
✎
10:48
|
||||
29
Ёпрст
05.04.13
✎
10:51
|
||||
30
ADirks
05.04.13
✎
10:54
|
И Set NoCount ON д.б. _первой_ конструкцией в запросе! На рефлексе.
а то, в результате, к примеру |delete from #ТаблицаСпецификаций |SET NOCOUNT ON получишь несколько неожиданный результат |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |