Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.28;
Скачать: CL | DM;

Вниз

Оператор 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 секунд



Страницы: 1 вся ветка

Текущий архив: 2002.02.28;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.008 c
3-90468
VIB
2002-02-01 17:27
2002.02.28
SQL+


14-90640
Knight
2002-01-12 13:22
2002.02.28
Глюки Винды не толькоменя наверное достали но и остальных пользователей Вин98...


3-90493
Yuri Btr
2002-02-04 11:06
2002.02.28
Нарушение структуры DBF ?


3-90520
tns
2002-02-05 15:01
2002.02.28
базы Access


1-90596
Стас
2002-02-12 14:14
2002.02.28
Перехват сообщений