Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-1093352150
False_Delirium
2004-08-24 16:55
2004.09.12
Наиболее быстрый способ перемножения матриц.


1-1093517944
aleks-ran
2004-08-26 14:59
2004.09.12
Возврат значения (ий) в вызывающую форму


1-1093588179
serg128
2004-08-27 10:29
2004.09.12
Как активизировать MDI окно?


1-1093501571
Mitrofan
2004-08-26 10:26
2004.09.12
Одна форма для нескольких пользователей


8-1088151204
wdst
2004-06-25 12:13
2004.09.12
Загрузка инфы из html файлов с винчестера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский