![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оператор UPDATE в SQL [MSSQL]
Garmahis © (2002-01-30 20:00:00)Мне надо заменить значения в одной строке таблицы на другие. Как я понимаю это делается оператором UPDATE но в нем требуется после SET указать колонки в таблице, которые надо заменить у меня их 59 неужели мне прийдётся все их прописывать? Нельзяли это сделать как-то проще?
kva (2002-02-04 08:34:00) [1]Вопрос попутно к Biocron и всем.При чем тут ограничение на 10000?
Иначе говоря, существуют ли ограничения на количество
обновляемых записей для конкретного сервера?
В частности, MSSQL 7.0?
Когда обновлять записи курсором оптимальнее, чем UPDATE или INSERT?
Вопрос не праздный, дело в том, что у меня запрос типа
INSERT ...
SELECT...
на ~ 20000 записей выполняется страшно долго (несколько минут или
десятков минут), хотя внутренний SELECT выполняется (если запускать отдельно) около 5 секунд
Garmahis (2002-02-03 20:22:00) [2]Он ошибается так как a2.A и a2.A1... всё это не одно значение а массив значений так как он содержит все значения строк колонки, где были произведенны изменения.
Ujin_m (2002-02-03 12:12:00) [3]> 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.
Sinclair Evilguest (2002-02-03 10:30:00) [4]Garmahis, слушай SergSuper"а - он дело говорит. Не надо курсоров! Так - быстрее всего. Я имею в виду, сервер выполнит это быстрее всего. Тебе это важно, т.к. речь идет про несколько сот компов...
Garmahis (2002-02-03 01:29:00) [5]Запрос правильный просто я писал его в общем виде :)
Я решил эту проблему если кому-то интересно могу сказать, что с помощью курсора. Команда FETCH могу теперь подробнее про неё рассказать если кинтересно.
SergSuper (2002-02-01 10:22:00) [6]Вы уверены что Ваш запрос правильно работает?
Надо писать примерно так:
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-01 09:11:00) [7]Записей много больше 10000. Дело в том чтоэто будет обновляться таблица на сервере с нескольких сотен удалённых компов.
Biocron (2002-02-01 00:03:00) [8]Если у тебя данные базы не более 10 000 записей мне так кажется можно создать сложный запрос на выборку и создане таблицы
уж очень запросик у тебя страшный выходит
Garmahis (2002-01-31 23:46:00) [9]Жаль, что прийдётся так мучиться. Но это я решу. Теперь у меня новая проблема: по этому же вопросу. У меня примерно такая строка
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 уникальный номер присваеваемый каждой строке и меняющийся при её редактировании. Соответствено в первой базе должны изменяться значения изменённые во второй базе, но встаёт проблема - если было изменено две и более строки то значения в первой найденной строке он пытается заменить на масив всех изменённых значений в этой колонке. Как сделать, что бы он заменял значения последовательно?
Turalyon (2002-01-31 16:29:00) [10]После SET необходимо перечислить все колонки, которые будешь обновлять, если тебе необходимо обновить все 59 колонок придется писать все 59... если только часть, то и перечислять надо только те, что будешь обнавлять.
Fay (2002-01-31 15:58:00) [11]...Нельзяли это сделать как-то проще?
Нет!
TSV (2002-01-31 10:17:00) [12]А тебе что, во всех колонках надо поменять на одно и то же значение?
Garmahis (2002-01-30 23:13:00) [13]Так мне надо заменять во всех и названия там не самые короткие, это чуть ли не пол страницы одних названий набивать. Нельзя ли одним оператором обьяснить, что мне надо во всех колонка проихвести замену ну вроде символа "*" в SELECT.
Mikhail (2002-01-30 20:10:00) [14]Странная таблица какая-то. Скольо колонок нужно столько и меняй.