Форум: "Базы";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
ВнизСкрипт для всех таблиц в БД Найти похожие ветки
← →
yaric (2004-08-16 11:22) [0]У меня такой вопрос: во всех таблицах бд(FireBird|Interbase) у меня есть одно поле field1. можно ли написать скрипт чтобы
заполнить или обновить это поле во всех таблицах сразу а не писать скрипт для каждой таблицы отдельно. Заранее спасибо
← →
Соловьев © (2004-08-16 11:29) [1]А смысл?
← →
сергей1 (2004-08-16 11:50) [2]разве-что в клиентском приложении в цикле перебрать все названия таблиц, выдрав их из information_schema.tables.
← →
yaric (2004-08-16 12:00) [3]Да дело в том что таблиц много(250)
а обновить поле надо быстро, а так быстро не получается.
А поле отвечает за сервер(идентификатор сервера) на которой
данная запись была зарегистрирована. И например новый филиал
устанавливает сервер+своя БД+импорт/экспорт между филиалами
необходимо знать на каком серваке эта запись появилась. Вот для чего поле такое нужно
Ну а думаю както можно ведь
в системных таблицах хранится метаданные
← →
yaric (2004-08-16 13:06) [4]Ну народ подскажите неужели никто с такой задачей не сталкивался
← →
Digitman © (2004-08-16 13:14) [5]
> подскажите
подсказываю
этот запрос возвратит тебе искомые имена таблиц
select RDB$RELATION_NAME
from RDB$RELATION_FIELDS
where RDB$FIELD_NAME = "FIELD1"
← →
yaric (2004-08-16 13:35) [6]Да о обновить поле как
если можно пример куска хранимой процедуры
← →
yaric (2004-08-16 13:37) [7]Он же возвращаемые наборы названий таблиц просто как строки воспринимает
← →
Digitman © (2004-08-16 13:43) [8]
> yaric (16.08.04 13:35) [6]
> Да о обновить поле как
UPDATE-запрос
> пример куска хранимой процедуры
в IB6 с хранимой проц-рой не получится, только - отдельные DSQL-запросы с кл.стороны
но вот в FB1.5 есть EXECUTE STATEMENT, позволяющее исполнять динамически построенные запросы в ХП/триггерах
← →
stud © (2004-08-16 13:45) [9]запусти в цикле апдейт по таблицам и потом все это закомить
← →
jack128 © (2004-08-16 13:55) [10]
> Да дело в том что таблиц много(250)
> а обновить поле надо быстро, а так быстро не получается.
все эти ухищрения тебе не помогут УСКОРИТЬ обновление пвоего поля, ибо все равно все сведется к последовательности update запросов.. Единственнное, это поможет тебе автоматизировать этот процесс.
← →
yaric (2004-08-16 14:31) [11]Всем спасибо
← →
сергей1 (2004-08-16 14:57) [12]а вот интересный вопрос, как теперь это автоматизировать ?
предположим, что имена таблиц запихаем во временную таблицу, а как их теперь в цикле извлекать оттуда, курсорами что-ли
← →
Digitman © (2004-08-16 15:01) [13]
> сергей1 (16.08.04 14:57) [12]
> имена таблиц запихаем во временную таблицу
зачем их еще куда-то "запихивать", если эти имена в любой секунд м.б. получены динамически, как показано в [5] ?
← →
сергей1 (2004-08-16 15:36) [14]не знаком с IB, это что там, имя таблицы возвращено ?
какая-же это автоматизация тогда, если каждое имя надо отдельным запросом возвращать.
Я-то имел ввиду, что все имена таблиц заталкиваются во временную таблицу :
select into #t table_name from information_schema.tables where table_type = "base table"
(если ты не знаком с MSSQL: в табличную переменную #t помещаются все названия таблиц в базе)
а вот теперь, например курсорами, в цикле оттуда все по-очереди извлекаются и подставляются в update
только вот курсоры это нехорошо, потому я и спросил, как ты там все это автоматизировал
← →
Digitman © (2004-08-16 15:47) [15]
> сергей1 (16.08.04 15:36) [14]
> не знаком с IB, это что там, имя таблицы возвращено ?
этим запросом возвращается НД, содержащий список имен таблиц, в которых имеется поле с именем FIELD1
← →
сергей1 (2004-08-16 15:56) [16]ну так я все-таки не понял про автоматизацию, как ты теперь из этого набора данных извлекаешь имена таблиц и подставляешь в update
← →
Digitman © (2004-08-16 16:10) [17]for
select RDB$RELATION_NAME
from RDB$RELATION_FIELDS
where RDB$FIELD_NAME = "FIELD1"
into :tablename
do
execute statement "update " || tablename || " set FIELD1 = NewValue";
← →
сергей1 (2004-08-16 16:25) [18]блин, в MSSQL нет оператора for, пожалуй сейчас схожу на sql.ru и спрошу, как это можно реализовать на MSSQL :)
← →
}{ander © (2004-08-16 19:43) [19]
> А смысл? [1]
Согласен. Обновлять таблицы и не знать в точности, что ты обновляешь, - это, имхо, не очено правильно. Мне кажется, что это все от не совсем правильного проектирования. Имхо, это все нужно делать триггерами: при изменении одного поля меняются зависимые.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.408 c