Форум: "Базы";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
Внизскопировать данные из поля с кривым именем Найти похожие ветки
← →
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 вся ветка
Форум: "Базы";
Текущий архив: 2006.05.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c