|
v7: делать ли if exist или сразу update? | ☑ | ||
---|---|---|---|---|
0
monsterZE
10.06.13
✎
13:22
|
что получается быстрее?
справочник около 15000 было: update .. Результат = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); Если Результат=0 Тогда insert .. переделал на if exist .. вот думаю, не медленнее ли? |
|||
1
ЧеловекДуши
10.06.13
✎
13:27
|
(0) Лучше проверить, а потом писать.
Или писать, но с условием. Нам не виден весь запрос :) |
|||
2
monsterZE
10.06.13
✎
13:29
|
апдейтится внешняя табличка с данными по товару
Если ОстатокТовара>0 Тогда Состояние("SQL items (update/insert)"); ТекстЗапроса = " |IF Exists (SELECT * FROM "+ТекСКЛТаб+" WHERE id = '"+ СокрЛП(Элемент.Код)+"') | BEGIN | UPDATE "+ТекСКЛТаб+" | SET | parent_id = '"+ СокрЛП(Элемент.Родитель.Код)+"' | ,nazvan = '"+ СокрЛП(текТоварНаименование)+"' | ,cena = '"+ Число(Элемент.Опт_Цена)+"' | ,up_ed = '"+ СокрЛП(Элемент.БазоваяЕдиница)+"' | ,up_kol = '"+ Число(?(Элемент.СтоимостьСборки>0,Элемент.СтоимостьСборки,1))+"' | ,ostatok = '"+ Число(ОстатокТовара)+"' | ,rezerv = '"+ Число(РезервТовара)+"' | WHERE | id = '"+ СокрЛП(Элемент.Код)+"' | END |ELSE | BEGIN | INSERT INTO "+ТекСКЛТаб+" (parent_id,id,nazvan,cena,up_ed,up_kol,ostatok,rezerv) | VALUES | ('"+СокрЛП(Элемент.Родитель.Код)+"','"+ СокрЛП(Элемент.Код)+"','"+ СокрЛП(текТоварНаименование)+"','"+ Число(Элемент.Опт_Цена)+"','"+ СокрЛП(Элемент.БазоваяЕдиница)+"','"+ Число(?(Элемент.СтоимостьСборки>0,Элемент.СтоимостьСборки,1))+"','"+ Число(ОстатокТовара)+"','"+ Число(РезервТовара)+"') | END |"; Иначе Состояние("SQL items (delete)"); ТекстЗапроса = " |DELETE FROM "+ТекСКЛТаб+" |WHERE | id = '"+ СокрЛП(Элемент.Код) +"'"; КонецЕсли; Результат = Запрос.ВыполнитьСкалярный(ТекстЗапроса); КонецЦикла; |
|||
3
trad
10.06.13
✎
13:32
|
обычно пишу так
|UPDATE ... |IF @@ROWCOUNT = 0 | INSERT ... и не парюсь |
|||
4
Jaap Vduul
10.06.13
✎
13:38
|
(2)
Некомильфо. Запросто может быть, что сразу после проверки на exists, в конкуретной сессии сделают insert. |
|||
5
monsterZE
10.06.13
✎
13:51
|
(3) ясно, значит быстрее по старому..
(4) не могет быть - вызывается из процедуры проведения |
|||
6
Злой Бобр
10.06.13
✎
14:04
|
(5) Может, еще как может. Проведение блочит токо журнал документов а не справочник...
|
|||
7
Ёпрст
10.06.13
✎
14:06
|
(6) тут ты ошибаешься, если была открыта выборка - заблочит и справочник.
|
|||
8
Ёпрст
10.06.13
✎
14:06
|
и любую табличку..
|
|||
9
monsterZE
10.06.13
✎
14:07
|
(6) так я-ж обновляю справочник по проведению документа?..
вобщем правильней вот так? ТекстЗапроса = " | UPDATE "+ТекСКЛТаб+" | SET | parent_id = '"+ СокрЛП(Элемент.Родитель.Код)+"' | ,nazvan = '"+ СокрЛП(текТоварНаименование)+"' | ,cena = '"+ Число(Элемент.Опт_Цена)+"' | ,up_ed = '"+ СокрЛП(Элемент.БазоваяЕдиница)+"' | ,up_kol = '"+ Число(?(Элемент.СтоимостьСборки>0,Элемент.СтоимостьСборки,1))+"' | ,ostatok = '"+ Число(ОстатокТовара)+"' | ,rezerv = '"+ Число(РезервТовара)+"' | WHERE | id = '"+ СокрЛП(Элемент.Код)+"' | IF @@ROWCOUNT = 0 | BEGIN | INSERT INTO "+ТекСКЛТаб+" (parent_id,id,nazvan,cena,up_ed,up_kol,ostatok,rezerv) | VALUES | ('"+СокрЛП(Элемент.Родитель.Код)+"','"+ СокрЛП(Элемент.Код)+"','"+ СокрЛП(текТоварНаименование)+"','"+ Число(Элемент.Опт_Цена)+"','"+ СокрЛП(Элемент.БазоваяЕдиница)+"','"+ Число(?(Элемент.СтоимостьСборки>0,Элемент.СтоимостьСборки,1))+"','"+ Число(ОстатокТовара)+"','"+ Число(РезервТовара)+"') | END |"; |
|||
10
Jaap Vduul
10.06.13
✎
14:23
|
(9)
Вместо подстановки конкретных значений в текст запроса, лучше использовать параметры. |
|||
11
Ёпрст
10.06.13
✎
14:34
|
(9) странный id у элемента твоего..
|
|||
12
Serginio1
10.06.13
✎
14:34
|
Merge
|
|||
13
trad
10.06.13
✎
14:35
|
(7) а была ли открыта выборка у автора ?..
|
|||
14
Ёпрст
10.06.13
✎
14:38
|
(13) это к (0) не относилось..
:) |
|||
15
Ёпрст
10.06.13
✎
14:39
|
нафига вот останки в табличке хранить последние, тоже не ясно.. видать для показа в форме списка справочника при подборе
|
|||
16
Ёпрст
10.06.13
✎
14:45
|
(13) давно спросить хотел, а чего с ИС усё удалил ?..
хде теперь твои поделки искать ? Только на 1cpp ? |
|||
17
trad
10.06.13
✎
14:49
|
(14) и мой вопрос был риторическим, адресован тебе, но предназначен автору. :)
(16) не имел желания оформить согласно требованиям модерации, поэтому пришлось удалить. Да, на 1cpp.ru |
|||
18
monsterZE
10.06.13
✎
15:32
|
(11) имеешь ввиду
ИДОбъекта = глМД.ЗначениеВДлиннуюСтрокуБД(Объект); ? =) а что такое?.. он уникальный |
|||
19
monsterZE
10.06.13
✎
15:36
|
про открытую выборку - не понял при чем тут оно и выборка чего должна быть открыта..?
апдейтится табличка во внешней базе скл апдейтится по проведению определенных документов давно уже работает и ничего не задваивалось и т.д... |
|||
20
Ёпрст
10.06.13
✎
15:51
|
(18) не, ты пихаешь Код элемента в id таблички... как то не комильфо, если тебе код элемента ручонками исправят
|
|||
21
monsterZE
10.06.13
✎
17:00
|
(20) а.. не, не имеют права =)
коды справочников, документов - все закрыто для редактирования у документов отдельное поле в чем юзвери пишут, что хотят а в справочниках - нех |
|||
22
Ёпрст
10.06.13
✎
17:05
|
я бы всё равно пихал id , а не код..ну так. на всякий :)
|
|||
23
monsterZE
10.06.13
✎
17:14
|
и... (0) (9) зря я вобщем "справочником" внешнюю табличку обозвал.. айм-сорри
trad - благодарности Ж) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |