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