Страница 1 из 1

Как массово изменить псевдонимы полей?

Добавлено: 28 янв 2016, 13:05
amnesiac
Подскажите, пожалуйста, как можно удалить псевдонимы полей и заменить их на значения имени поля, не открывая каждый раз свойства поля? В Arcgis 10.2 нет инструмента "Изменить поле", есть ли какой-то другой способ?

Re: Как массово изменить псевдонимы полей?

Добавлено: 28 янв 2016, 14:08
Ariki
Если это небольшая файловая БД, можно экспортировать её в XML, отредактировать и импортировать в новую базу. Если SDE, можно попробовать сделать это через SQL.

Re: Как массово изменить псевдонимы полей?

Добавлено: 28 янв 2016, 15:15
Игорь Лебедь
1) Экспортируйте через Data Interoperability Tools в mid \ mif, откройте mif notepad++-ом, переименуйте текстовый файл, сохраните, экспортируйте в АРК обратно.

2) Или импорт в PostgreSQL/PostGIS и писайт скрипт типа

Код: Выделить всё

ALTER TABLE [ ONLY ] name [ * ]
    RENAME [ COLUMN ] column TO new_column
экспорт шейпа обратно в АРК.

Re: Как массово изменить псевдонимы полей?

Добавлено: 28 янв 2016, 15:47
amnesiac
Ariki писал(а):Если это небольшая файловая БД, можно экспортировать её в XML, отредактировать и импортировать в новую базу.
Игорь Лебедь писал(а):1) Экспортируйте через Data Interoperability Tools в mid \ mif, откройте mif notepad++-ом, переименуйте текстовый файл, сохраните, экспортируйте в АРК обратно.
это наверное немного не то, что я имела ввиду. отредактировать примерно так же можно и в арккаталоге
шейп, к сожалению, не подходит, у меня длинные имена, которые не представляется запихнуть в 10 знаков без потери смысла=(
Ariki писал(а):можно попробовать сделать это через SQL.
а можно поподробнее, как этим пользоваться? нет опыта написания скриптов и запросов, кроме как из аркмэп

Re: Как массово изменить псевдонимы полей?

Добавлено: 28 янв 2016, 19:31
Ariki
:!: Действия это потенциально опасные, так как модифицируют служебную таблицу SDE. Лучше потренируйтесь сначала на какой-нибудь ненужной базе. Не знаю, какая у вас СУБД, нижеизложенное верно для MS SQL Server.

Запускаете SQL Server Management Studio, подключаетесь к базе данных, выбираете её в левой панели, жмёте кномку "Создать запрос" на панели инструментов вверху. Текст запроса у меня получился такой:

Код: Выделить всё


update dbo.GDB_ITEMS set Definition.modify('delete(/DETableInfo/GPFieldInfoExs/GPFieldInfoEx/AliasName)') where Type = 'cd06bc3b-789d-4c51-aafa-a467912b8965';

Здесь dbo.GDB_ITEMS - имя служебной таблицы, содержащей информацию об объектах ГБД в поле Definition в форме XML. Запрос удаляет элемент AliasName из определения всех полей всех таблиц. Значение поля Type = 'cd06bc3b-789d-4c51-aafa-a467912b8965' соответствует таблицам, для пространственных классов нужно подставить '70737809-852c-4a03-9e22-2cecea5b9bfa'. Но лучше уточните, просмотрев данные в таблице GDB_ITEMS с помощью той же SQL Server Management Studio. Вы можете ограничить изменение только некоторыми таблицами, добавив условие where по полю Name.

В целом же лучше туда не лезть без опыта. Я сам сейчас впервые попробовал, пока вроде ничего не сломалось, но кто его знает. Хорошо бы после удаления добавить обратно пустой элемент AliasName или, ещё лучше, поместить в него значение элемента Name, но но у меня сейчас нет времени разбираться, как это сделать, у меня нет особого опыта ни в SQL Server, ни в XQuery. По ссылке выше человек модифицирует псевдоним класса пространственных объектов, можно использовать как пример.

Но если вариант с экспортом всей базы в XML вам подходит, вы можете сделать то же самое в текстовом редакторе, например, в Notepad++ с помощью регулярных выражений. Есть и специализированные редакторы XML, в них точно так же можно массово изменять данные, не обязательно править всё вручную.

Re: Как массово изменить псевдонимы полей?

Добавлено: 29 янв 2016, 09:40
amnesiac
Спасибо большое! Очень полезная информация, с файловой GDB разобралась, с SDE тоже попробую, потом наверняка пригодится.