Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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 секунд



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

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

Наверх





Память: 0.47 MB
Время: 0.004 c
3-90521
a1st
2002-02-05 16:42
2002.02.28
qreport 3.0 -> 3.0.5 - перестало работать!?


3-90479
_Mihail_
2002-02-04 06:13
2002.02.28
Переход к записи по номеру


14-90650
vajo
2002-01-14 09:39
2002.02.28
Video


7-90688
Dimonf
2001-11-20 17:48
2002.02.28
Как написать прогу для посылки SMS с компьютера через мобильный телефон.


3-90506
DenKop
2002-02-04 20:25
2002.02.28
Удаление всех записей из БД





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский