|
|
|
Странное использование конструкции INSERT into ... SELECT | ☑ | ||
|---|---|---|---|---|
|
0
beholder
16.08.07
✎
18:44
|
Вот такая кнструкция
Пока Запрос.Группировка(1) = 1 Цикл Пока Запрос.Группировка(2) = 1 Цикл Пока Запрос.Группировка(3) = 1 Цикл ТекстЗапроса = " INSERT into XXX.dbo.XXX (TOVAR, DATE) SELECT '" + Запрос.Товар.Наименование + "' AS Expr1, '" + СтрДата + " AS Expr2, '"; НД.Выполнить(ТекстЗапроса); Я хочу понять, есть какие-то аргументы в пользу такого использования? Или лучше использовать INSERT into () values () |
|||
|
1
перцептрон
16.08.07
✎
18:47
|
о_О
|
|||
|
2
Андрюха
16.08.07
✎
18:48
|
O_o
|
|||
|
3
перцептрон
16.08.07
✎
18:53
|
О о
.Ш -|- / \ |
|||
|
4
перцептрон
16.08.07
✎
18:55
|
блин, испортило
|
|||
|
5
beholder
16.08.07
✎
19:08
|
чё не так?
|
|||
|
6
beholder
16.08.07
✎
19:09
|
блин. анимешники на
|
|||
|
7
insider
16.08.07
✎
19:13
|
(7) это вот у тебя хотелось спросить, че не так с консрукцией? :)
|
|||
|
8
beholder
16.08.07
✎
19:16
|
(7) ну INSERT into ... SELECT используется чтобы сразу вставить несколько строк в табличку из другой таблички и т.п.
Нахрена это использовать в цикле когда заведомо вставляется 1 строка, мне не понятно. Вот я и думаю, то ли это просто чувак немножко неаккуратно написал код. То ли он гуру и знает что так будет быстрее работать... |
|||
|
9
insider
16.08.07
✎
19:19
|
(8) такая конструкция имеет право на жизнь и используется когда она нужна, а когда не нужна - не используется :)
ну не знаю, как тебе ответить, почитай про скуль, поймешь |
|||
|
10
beholder
16.08.07
✎
19:21
|
(9) ты хочешь сказать что в этой конструкции заключен глубокий смысл.
|
|||
|
11
insider
16.08.07
✎
19:26
|
(10) ну я бы юзал, когда мне в некую таблицу надо внести нечто (что - я не знаю, но могу выбрать по определенным условиям из другой таблицы).
я правда не врубаюсь в твой вопрос. еще спроси зачем select вообще нужен :) |
|||
|
12
insider
16.08.07
✎
19:28
|
+11 некорректно: еще если мне нужно вставить несколько строк (это вдруг не понял) по вышеописанным принципам
|
|||
|
13
beholder
17.08.07
✎
10:09
|
(12) вот ыменна!
Посмотри внимательней на код. Идет цыкл по выборке запроса (1Сного) и вставляется фактически 1 строка. Обычно INSERT into ... SELECT используется так INSERT into Table1 (Col1, Col2) SELECT * FROM table2 Это я понимаю. А вот зачем этот оператор использовать для вставки 1 строки... не врубаюсь. Может так работает быстрее ... Фиг знает |
|||
|
14
DmitrO
17.08.07
✎
10:24
|
да не работает это быстрее, да и медленее тоже не работает
чтобы было реально быстрее надо параметризировать запрос |
|||
|
15
DmitrO
17.08.07
✎
10:28
|
причем, имхо, пофиг какой с select или с values
но идеалогически правильнее в данном случае использовать insert values |
|||
|
16
DmitrO
17.08.07
✎
10:31
|
>>Вот я и думаю, то ли это просто чувак немножко неаккуратно написал код. То ли он гуру и знает что так будет быстрее работать...
Если бы он был гуру, он бы использовал параметризированный запрос, а так как написано, это корявые понты. :) |
|||
|
17
masky
17.08.07
✎
10:32
|
>чтобы было реально быстрее надо параметризировать запрос
с курсором еще быстрее |
|||
|
18
DmitrO
17.08.07
✎
10:36
|
да вот фиг знает, не факт, надо пробовать, любой среверный курсор это много маленьких запросов вызовов служебных ХП, собственно параметризированный запрос это тоже самое
|
|||
|
19
DmitrO
17.08.07
✎
10:36
|
*серверный курсор
|
|||
|
20
masky
17.08.07
✎
10:38
|
>собственно параметризированный запрос это тоже самое
неа |
|||
|
21
DmitrO
17.08.07
✎
10:38
|
имхо быстрее всех с этой задачей справится 1с++ и метод ВыполнитьСКЛ_ИзТЗ
|
|||
|
22
masky
17.08.07
✎
10:40
|
а он случаем не курсор делает?
|
|||
|
23
DmitrO
17.08.07
✎
10:40
|
>>неа
объективные причины назвать можешь, или по опыту знаешь? |
|||
|
24
DmitrO
17.08.07
✎
10:40
|
>>а он случаем не курсор делает?
нет, параметризированный запрос |
|||
|
25
DmitrO
17.08.07
✎
10:43
|
там просто существенный выигрышь будет еще в том, что результат запроса (1С-овского) можно быстро выгрузить в ТЗ, и эту ТЗ передать сразу в метод ВыполнитьСКЛ_ИзТЗ, т.о. не будет итераций ТЗ и установки значений в модуле 1С, а будет работать все компиллированное (итерации ТЗ)
|
|||
|
26
774816
17.08.07
✎
10:48
|
(0) Переправь на values () а чувак просто не знал что есть
INSET INTO .. VALUES() |
|||
|
27
beholder
17.08.07
✎
11:29
|
(25) - ну это да. Видимо и придется так сделать, ибо неприемлемо медленно работает. Я еще попробую запрос 1Совский на прямой переписать и и зполучившейся ТЗ ...
(26) - ну не то что не знал, видимо сначала хотел вставлять скопом а потом передумал. А эта конструкция осталась... |
|||
|
28
DmitrO
17.08.07
✎
11:45
|
>>Я еще попробую запрос 1Совский на прямой переписать и и зполучившейся ТЗ ...
И это правильно, одобрям, т.к. результат 1с-кого запроса это dbf-ка на локальном диске в каталоге временных файлов - это туфта при современных объемах памяти. |
|||
|
29
beholder
17.08.07
✎
19:11
|
Антиресно а удалить вот так скопом можно? Вот это вот:
// НД.Prepare("Delete from XXX.dbo.INFO_REMONT where TOVAR_NAME = ? // |and SERIAL_NUM = ?"); // // НД.ExeSQL_FromTV(тз); Не работает. Пишет что неправильный формат времени |
|||
|
30
Gepard
17.08.07
✎
20:29
|
(25) +1
|
|||
|
31
Gepard
17.08.07
✎
20:33
|
(30) нифига
там From нету, он просто подставляет переменные, т.е. получается просто идиотизм... |
|||
|
32
Gepard
17.08.07
✎
20:35
|
(31) + или в (0) не полный текст?
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |