|
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) Вот завтра и напомни, а то заранее...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |