Имя: Пароль:
1C
1C 7.7
v7: SQL запросы. Можно ли использовать временные таблицы.
0 andryuhin
 
30.07.14
18:09
В 8ке в запросах есть возможность командой ПОМЕСТИТЬ,  "поместить" результат запроса в некую таблицу, а затем использовать ее в следующем запросе (для этого в 8ке даже спец.объект есть МенеджерВременныхТаблиц).  

Можно ли так в 7ке в SQL запросах?
1 Джинн
 
30.07.14
18:10
На родных запросах? Нет.
2 Джинн
 
30.07.14
18:11
Если на прямых - можно во временную таблицу складывать.
3 andryuhin
 
30.07.14
18:11
(1) Что такое "на родных запросах"?
4 andryuhin
 
30.07.14
18:11
(2) а как ?
5 ДенисЧ
 
30.07.14
18:16
(4) Тебе дать ссылку на учебник по SQL?
6 andryuhin
 
30.07.14
18:16
(5) Мне рабочий пример нужен простенький.
7 ДенисЧ
 
30.07.14
18:17
(6)
select top 10 ID
into #tt
from sc33
8 andryuhin
 
30.07.14
18:22
(7) Это получается выбираем первые 10 ID из таблицы sc33 и помещаем это все в таблицу tt.   Затем этот запрос выполняется.  

А затем мне нужно объявить следующий запрос и в него эту tt запихнуть.  Как в новом запросе к tt обратиться?
9 ДенисЧ
 
30.07.14
18:24
(8) не поверишь...
Если не будешь создавать новый коннект, то прямо так и обращайся - #tt
Она девушка необидчивая, по морде не надаёт...
10 andryuhin
 
30.07.14
18:25
(9) :)   А, прям в первом запросе?
11 ДенисЧ
 
30.07.14
18:27
(10) ЗАчем? Можешь и на втором свидании...
12 el-gamberro
 
30.07.14
18:47
(11) ну нужно еще декларировать #t
Кроме того #t не зависит от коннекта, так принято для глобальной временной таблицы. ##t так принято называть локальную временную таблицу.
13 ДенисЧ
 
30.07.14
18:49
(12) Внимательно прочитай мой пример....
А потом освежи память насчет select into...
И с # и ## ты ошибаешься ровно наоборот...
14 el-gamberro
 
30.07.14
18:53
(13) чет я не вспомню, сразу или нет суют во временную. вроде декларировать надо. но в любом случае надо проверить существует ли такая таблица перед инто. Если существует, что дропануть ее.
15 ДенисЧ
 
30.07.14
18:55
(14) Декларировать надо, если ты её явно хочешь создать, с нужными типами и индексами.
А для просто куска селекта - не обязательно.
Но дропать - да, нужно, если коннект не пересоздаёшь
16 КонецЦикла
 
30.07.14
19:47
В T-SQL немного бОльшие возможности нежели в унылом языке запросов от 1С.
Иногда полезно создать таблицу с нужными индексами, а затем уже вставлять

|IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE Id = OBJECT_ID('tempdb..#tempdt'))
        |DROP TABLE #tempdt
        |CREATE TABLE #tempdt (Goods char(9), Lot char(9), Number numeric(15,3) PRIMARY KEY CLUSTERED (Goods, Lot))
        |    
        |INSERT INTO #tempdt
        |SELECT ...
17 КонецЦикла
 
30.07.14
19:49
Можно короче...
if object_id('tempdb..#tempdt') is not null drop table #tempdt
...
18 m-serg74
 
30.07.14
19:56
(17) а сама он не удаляется совсем? или если удаляется то при каких условиях?
19 m-serg74
 
30.07.14
19:57
/сама он/ = сама она
20 Voronve
 
30.07.14
19:59
Нет конечно. Голый скуль сам ничего не делает. Это прокладка в виде 1С пытается умничать
21 ДенисЧ
 
30.07.14
20:01
(20) ltkbcm
22 m-serg74
 
30.07.14
20:01
(20) а после объявления в одном запросе ##tt1, если повторно выполнить его же и в нем тоже объявить ##tt1 - руганется что такая уже имеется, а если перед созданием снова удалять не удалю ли так же объявленную, как ##tt1, но другим пользователем не грохну ли чужую
23 КонецЦикла
 
30.07.14
20:04
(17) пока работа кипит :)
я всегда дропаю перед созданием и удаляю после использования
(22) Используй # - локальные таблицы (если это логикой предусмотрено) и подчищай за собой
24 ДенисЧ
 
30.07.14
20:05
(22) не создавай ##, создавай #
25 m-serg74
 
30.07.14
20:06
(23) одинарную #? и когда удалять буду др. пользователя не затронет?
26 ДенисЧ
 
30.07.14
20:07
(25) Да. Это в пределах одного коннекта. Более того, когда ты оный закроешь, твоя # прикажет долго жить, правда, наследства не оставит...
27 КонецЦикла
 
30.07.14
20:07
(25) Не затронет конечно
28 m-serg74
 
30.07.14
20:08
(26) коннект, это 1С закрою, ODBCRecordset-объект похерю, или что?
29 m-serg74
 
30.07.14
20:09
(26) (27) кстати спс огромное, а то все пробую, логики не могу толком выяснить, а описания особо не нашел
30 ДенисЧ
 
30.07.14
20:10
(28) Не совсем помню, как там в 1срр, но да, похоже.
Опен с коннектСтринг ты кому говоришь? Вот его и надо того...
31 m-serg74
 
30.07.14
20:13
(30) я так пользуюсь
ТекстЗапрос = "....";

РС = СоздатьОбъект("ODBCRecordset");
ТабЗнач = РС.ВыполнитьИнструкцию(ТекстЗапроса);

и что сделать чтоб не осталась ВТ в СКЛ?
32 m-serg74
 
30.07.14
20:16
+(31) хотя и насчет одиночной "#" спс парни дальше буду экскремены ставить:)
33 ДенисЧ
 
30.07.14
20:16
(31) тебе нужна гарантия?
После закрытия 1с она точно исчезнет.
А если в периоде - используй drop table. И твои волосы будут...
34 m-serg74
 
30.07.14
20:18
(33) отсутствие ошибок надо что есть такая + чтоб чужое не грохнуть на полпути исполнения(др. пользователя) + чтоб не валялось не нужное, типа создал, потом по какому то поводу вылет и не удалилось, а потом снова создалась(или нет), ну и т.п.
35 ДенисЧ
 
30.07.14
20:19
(34) значит дропай. Смело.
Другим не повредишь.
36 m-serg74
 
30.07.14
20:21
(35) спс, вот это в принципе больше всего и смущало
37 ДенисЧ
 
30.07.14
20:22
(36) ты бы почитал учебники... Полезно, говорят...
38 m-serg74
 
30.07.14
20:25
(37) да вот что то в T-SQL не особо про разные коннекты и пр. пишут, а если пишут, то как в договорах юристы, все так двусмысленно
39 m-serg74
 
30.07.14
20:27
(37) поэтому пока использовал чтоб не нагромождать только "псевдоним" или как там правильно назвать, типа кусок текста который в нужное место дальше подставляется, но понимаю что это лажа ибо кажный раз будет "запрашиваться"
40 ДенисЧ
 
30.07.14
20:28
(38) Да нормально пишут.
Я же когда-то как-то узнал... Правда, не помню откуда, но сильно сомневаюсь, что прочитал весь MSDN...
Главное, найти нормальный учебник. В этом главная сложность :-)
41 m-serg74
 
30.07.14
20:30
(40) ну я тебе не чета, ты сколь - лет 10 пользуешь это, а я с прямыми начал в СКЛ пытаться разбираться с полгода примерно
42 m-serg74
 
30.07.14
20:31
+(41) поэтому и спрашаю у Вас, благо есть пока у кого спросить
43 ДенисЧ
 
30.07.14
20:31
(41) Кхм... Не 10... а 17... :-))))))
44 m-serg74
 
30.07.14
20:33
(43) тем более респект, я ваще тогда в 1С младенец, про СКЛ и прочие премудрости... получается еще несколько лет до рождения :)
45 el-gamberro
 
30.07.14
21:28
Рекомендую - http://www.ozon.ru/context/detail/id/5767915/ Либо аналогичный учебному курсу. Там правда отзывы не очень. Я читал про 2005. В свое время понял что такое кластерный индекс и прочие премудрости. :)
46 Chameleon1980
 
31.07.14
21:02
(43) привет. скоро три девятки стаж :)
47 ДенисЧ
 
31.07.14
21:03
(46) Воскресенье....
Блин... Я же в воскресенье не пью... (((
48 Chameleon1980
 
31.07.14
21:56
:) а у мну завтра денюх 01.08.1980
49 ДенисЧ
 
31.07.14
21:57
(48) Вот завтра и напомни, а то заранее...
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн