Имя: Пароль:
IT
Админ
Реализация измерений в SQL
,
0 vhl
 
13.02.15
13:15
Есть своя база sql. Есть допустим таблица с колонками с1,с2,с3.
Например надо поменять колонку с3 у записи, в которой измерения с1 = 'val1' и с2 = 'val2'. Посмотрел как 1С это делает:
DELETE FROM MyTable WHERE c1 = 'val1' AND c2 = 'val2'
INSERT INTO MyTable (c1,c2,c3) VALUES ('val1', 'val2','val3')
Это нормальная практика или может как-то попроще без доп. записей?
1 H A D G E H O G s
 
13.02.15
13:15
Update же!
2 Jaap Vduul
 
13.02.15
13:20
Вообще зависит от логики приложения и структуры таблицы.
Если комбинация с1 и с2 не является уникальным ключом, то реузльтат del+ins и upd может сильно отличаться.
3 vhl
 
13.02.15
13:28
(1) update не добавит запись если ее нет в базе
4 vhl
 
13.02.15
13:28
(2) с1+с2 уникальны
5 Лефмихалыч
 
13.02.15
13:30
(3) именно по этому 1С его и не использует при записи наборов регистров
6 igork1966
 
13.02.15
13:31
(0) UPDATE MyTable SET c3 = 'val3' WHERE c1 = 'val1' AND c2 = 'val2'

если запись действительно одна
7 vhl
 
13.02.15
13:32
(6) см (3)
8 igork1966
 
13.02.15
13:32
(6) + или тебе требуется несколько записей изменить
9 igork1966
 
13.02.15
13:34
(0)(7) ОООО сорри это же про регистры речь!
10 ShoGUN
 
13.02.15
13:34
(7) А в чём вопрос? Записи без INSERT не добавить. Лишние без DELETE не удалить. Разве что два запроса - один на UPDATE, другой на DELETE+INSERT, но мне почему-то кажется, что это не быстрее и не проще.
11 vhl
 
13.02.15
13:39
(10) ну,я не настоящий sql-щик, поэтому и спрашиваю, может есть поумнее что-то чем delete+insert
12 vhl
 
13.02.15
13:40
вот есть REPLACE функция, только какая-то она ущербная
13 Garikk
 
13.02.15
13:42
Эта ф-ция не ущербная, она просто на данные не влияет... если я не ошиюаюсь
14 ShoGUN
 
13.02.15
13:43
(11) На конкретный вопрос в (0) - UPDATE. Но у операторов чёткое разграничение - UPDATE не может добавлять/удалять записи, что для регистра не подходит.
REPLACE - это функция для работы со строками, к вопросу в (0) не имеет вообще никакого отношения.
15 vhl
 
13.02.15
13:44
(13) я так понял она только со строками работает и только с одной колонкой, так - вполне себе меняет:
UPDATE authors SET city = replace(city, 'Salt', 'Olympic') WHERE city LIKE 'Salt%'
16 Garikk
 
13.02.15
13:44
(15) я про REPLACE
17 vhl
 
13.02.15
13:45
(15) фак, понял, что тупанул :(
18 trad
 
13.02.15
13:48
вариант 1
delete
insert

вариант 2
if exists(select) update
else insert

вариант 3
update
if @@rowcount = 0 insert

- выбери себе
19 trad
 
13.02.15
13:49
я пользую 3
20 rsv
 
13.02.15
14:18
(0) Это сработает на  любой заявленной в поддержку 1С СУБД. ANSI так сказать.
21 rsv
 
13.02.15
14:18
(18) А вот это ... не на любой.
22 vhl
 
13.02.15
14:40
(18) ок, спасибо.
(21) мне не для 1с надо
23 Ёпрст
 
13.02.15
14:44
(22)он не про 1с..а про версии субд