Вниз
Скачать: CL | DM;

скопировать данные из поля с кривым именем   Найти похожие ветки 

← →
July   (2006-03-16 12:30) [0]

Здравствуйте!
Ситуация такая - в базе под IB5 было поле под названием type (кто-то додумался обозвать, а субд и не препятствовала)
Теперь перешли на IB7, в запросах ругается, что не понимает, что еще за поле такое type - очевидно, зарезервированное слово.
Создала нормальное поле с другим именем, поскольку данные в таблице уже есть, заполнила его пока нулями, но надо туда скопировать актуальные данные из старого поля - этого злосчастного type. Записей несколько сотен, вручную не прокатит :)
Теперь вопрос - можно ли как-нибудь в sql-инструкции обратиться к этому полю, не используя его имени? мож по номеру какому-нибудь из системной таблицы?
Или может подскажете иной какой-нибудь способ скопировать данные из одного поля в другое?
Просто переименовать его не выйдет - много зависимостей, хоть и не индекс.
Иначе остается только достаточно геморный в текущих  обстоятельствах вариант - сгенерировать новую пустую базу с корректным именем поля и полностью переливать в нее ВСЕ данные старой. Очень хотелось бы избежать этого.
Благодарю за внимание :)


← →
Anatoly Podgoretsky ©   (2006-03-16 12:32) [1]

"type"


← →
Desdechado ©   (2006-03-16 13:25) [2]

http://delphimaster.net/view/3-1142418789/


← →
July   (2006-03-16 13:32) [3]


> "type"


В смысле, взять в запросе в кавычки название поля?
Попробую...


← →
Anatoly Podgoretsky ©   (2006-03-16 14:05) [4]

July   (16.03.06 13:32) [3]
Именно так.


← →
July   (2006-03-16 16:59) [5]

update <tbl> set type_new=<tbl>."type"
...
Token unknown - line 1, char 52.
"type".

:(


← →
Anatoly Podgoretsky ©   (2006-03-16 17:03) [6]

Так возможно требуется точное соблюдение регистра


← →
July   (2006-03-16 17:30) [7]

Завтра попробую.
Сколько там комбинаций разных регистров 4-х букв? ;)))))
А точно какой регистр был при создании нигде не увидеть?
А то IBExpert все везде заглавными показывает..


← →
Romkin ©   (2006-03-16 18:28) [8]

update  RDB$RELATION_FIELDS set rdb$field_name = "REC_TYPE"
where rdb$relation_name = "MYTABLE" and rdb$field_name = "TYPE";
Только учти, что констрейнтов и зависимостей на это поле не должно быть :)
А посмотреть поле - как раз в этой таблице


← →
API ©   (2006-03-16 19:31) [9]

Попробуйте [type]


← →
atruhin ©   (2006-03-17 04:23) [10]

Решал подобную задачу (именно type), следующим образом:
1. В IBExpert сохраняем все метаданные базы в файл.
2. Поиском по файлу находим все вхожения type (тригера, процедуры, индексы), и все эти объекты копируем во второй файл.
3. В начало файла помещаем, примерно такое:
  ALTER TABLE MENU_GROUPS ADD TIPE SMALLINT
  update menu_groups set TIPE = TYPE
4. Для каждого объекта создаем в начале файла: drop procedure ..., drop triger ... и т.д.
4. В конце файла удаляем поле.

Накатываем скрипт на базу, под IB5, наслаждаемся :)


← →
July   (2006-03-22 12:14) [11]

я тут доступа не имела несколько дней
to Romkin, API, atruhin - ваших сообщения к сожалению увидела только сейчас, не пробовала. Под IB5 в базу лезть у меня уже возможности нет.

Проблему решила следующим образом:
- Добавила, как и собиралась, новое поле.
- Удалила один constraint, который был на старое
- перекомпилила 10 процедур, в которых были ссылки на type (заменила ссылками на новое поле)
- переименовала старое поле средствами IBExpert (он составил такую конструкцию: ALTER TABLE ... ALTER TYPE TO TYPE_OLD;)
- только после этого удалось данные из этого поля вытащить:
 update ... set type_new=type_old

Вот.. зато перегенерировать базу не пришлось :))
Всем спасибо!



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: -0.965 c
15-1145557519
ArtemESC
2006-04-20 22:25
2006.05.14
Может ли жесткий диск содержать больше 4 разделов?


2-1145711693
sick boy
2006-04-22 17:14
2006.05.14
Как получить имена видеоадаптера, hdd, CD-ROM, монитора...


3-1142792342
Serg1981
2006-03-19 21:19
2006.05.14
Поиск дублей


15-1145545721
ArtemESC
2006-04-20 19:08
2006.05.14
ЖЗЛ Ленин...


2-1146130611
Handle
2006-04-27 13:36
2006.05.14
TreeView




   Наверх