Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Скрипт для всех таблиц в БД [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]

А смысл?


Наверх

Титульная страница Поиск, карта сайта Написать письмо