Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];




Вниз

Оператор UPDATE в SQL 


Garmahis   (2002-01-30 20:00) [0]

Мне надо заменить значения в одной строке таблицы на другие. Как я понимаю это делается оператором UPDATE но в нем требуется после SET указать колонки в таблице, которые надо заменить у меня их 59 неужели мне прийдётся все их прописывать? Нельзяли это сделать как-то проще?



Mikhail   (2002-01-30 20:10) [1]

Странная таблица какая-то. Скольо колонок нужно столько и меняй.



Garmahis   (2002-01-30 23:13) [2]

Так мне надо заменять во всех и названия там не самые короткие, это чуть ли не пол страницы одних названий набивать. Нельзя ли одним оператором обьяснить, что мне надо во всех колонка проихвести замену ну вроде символа "*" в SELECT.



TSV   (2002-01-31 10:17) [3]

А тебе что, во всех колонках надо поменять на одно и то же значение?



Fay   (2002-01-31 15:58) [4]

...Нельзяли это сделать как-то проще?
Нет!



Turalyon   (2002-01-31 16:29) [5]

После SET необходимо перечислить все колонки, которые будешь обновлять, если тебе необходимо обновить все 59 колонок придется писать все 59... если только часть, то и перечислять надо только те, что будешь обнавлять.



Garmahis   (2002-01-31 23:46) [6]

Жаль, что прийдётся так мучиться. Но это я решу. Теперь у меня новая проблема: по этому же вопросу. У меня примерно такая строка
UPDATE DB1 SET A=(SELECT A FROM DB2 WHERE ID IN(SELECT ID FROM DB2) AND UID NOT IN(SELECT UID FROM DB2)), A1=(SELECT A2 FROM DB2 WHERE ID IN(SELECT ID FROM DB2) AND UID NOT IN(SELECT UID FROM DB2)),A3=...,A58=(...) WHERE ID IN(SELECT ID FROM DB2) AND UID NOT IN(SELECT UID FROM DB2)
Здесь ID это номер присвоенный каждому обьекту из множества описанному в таблице, а UD уникальный номер присваеваемый каждой строке и меняющийся при её редактировании. Соответствено в первой базе должны изменяться значения изменённые во второй базе, но встаёт проблема - если было изменено две и более строки то значения в первой найденной строке он пытается заменить на масив всех изменённых значений в этой колонке. Как сделать, что бы он заменял значения последовательно?



Biocron   (2002-02-01 00:03) [7]

Если у тебя данные базы не более 10 000 записей мне так кажется можно создать сложный запрос на выборку и создане таблицы

уж очень запросик у тебя страшный выходит



Garmahis   (2002-02-01 09:11) [8]

Записей много больше 10000. Дело в том чтоэто будет обновляться таблица на сервере с нескольких сотен удалённых компов.



SergSuper   (2002-02-01 10:22) [9]

Вы уверены что Ваш запрос правильно работает?

Надо писать примерно так:

UPDATE DB1 SET A= a2.A, A1=a2.A1
from DB1 a1, DB2 a2
where a1.ID=a2.ID and a1.UID<>a2.UID

Не уверен что я правильно понял что Вам надо, но в любом случае Ваш запрос написан неграмотно.



Garmahis   (2002-02-03 01:29) [10]

Запрос правильный просто я писал его в общем виде :)
Я решил эту проблему если кому-то интересно могу сказать, что с помощью курсора. Команда FETCH могу теперь подробнее про неё рассказать если кинтересно.



Sinclair Evilguest   (2002-02-03 10:30) [11]

Garmahis, слушай SergSuper"а - он дело говорит. Не надо курсоров! Так - быстрее всего. Я имею в виду, сервер выполнит это быстрее всего. Тебе это важно, т.к. речь идет про несколько сот компов...



Ujin_m   (2002-02-03 12:12) [12]

> SergSuper -> Naskolko ia ponimaiu tvoi update ne tojdestvennen ishodnomu. Prodlema v tom chto uslovie vupolniaetsia u tebia dlia odnoi i toi je zapisi v DB2 a ne exists v ishodnoi.



Garmahis   (2002-02-03 20:22) [13]

Он ошибается так как a2.A и a2.A1... всё это не одно значение а массив значений так как он содержит все значения строк колонки, где были произведенны изменения.



kva   (2002-02-04 08:34) [14]

Вопрос попутно к Biocron и всем.При чем тут ограничение на 10000?
Иначе говоря, существуют ли ограничения на количество
обновляемых записей для конкретного сервера?
В частности, MSSQL 7.0?
Когда обновлять записи курсором оптимальнее, чем UPDATE или INSERT?
Вопрос не праздный, дело в том, что у меня запрос типа
INSERT ...
SELECT...
на ~ 20000 записей выполняется страшно долго (несколько минут или
десятков минут), хотя внутренний SELECT выполняется (если запускать отдельно) около 5 секунд




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.024 c
1-90583           konorl                2002-02-06 04:23  2002.02.28  
Метод AddPicture в WordBasic


4-90699           Ender                 2001-12-28 16:06  2002.02.28  
Реестр


1-90591           Dumitru               2002-02-12 11:03  2002.02.28  
Delphi 6 Update


14-90662          Polevi                2002-01-15 17:46  2002.02.28  
Civilization 3


3-90501           AlderMan              2002-02-01 17:39  2002.02.28  
Многомерные таблицы