Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.12;
Скачать: CL | DM;

Вниз

Скрипт для всех таблиц в БД   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.027 c
3-1092641231
Ted
2004-08-16 11:27
2004.09.12
самая отказоустойчивая сетевая база


14-1093172099
Светик
2004-08-22 14:54
2004.09.12
Жаждущая чего-нибудь ахового и интересного


4-1090860450
Awod
2004-07-26 20:47
2004.09.12
Перехват сообщений компонентом.


4-1091311946
BaG
2004-08-01 02:12
2004.09.12
Автоматическое включение компьютера


3-1092731625
Lizka
2004-08-17 12:33
2004.09.12
как добавить строку из одного DBLookupListBox в другой?