Редактирование версионных данных в SQL Server с помощью SQL
Редактировать версионные данные в базе геоданных в Microsoft SQL Server можно двумя способами: изменяя именованную версию в версионном виде или редактируя версию DEFAULT в версионном виде. См. описание каждой модели редактирования в разделе Краткий обзор редактирования версионных данных с использованием SQL.
В большинстве случаев используется только одна модель редактирования. Однако можно использовать обе модели на одном участке. Поэтому этот рабочий процесс описывает, как использовать обе модели, чтобы вы могли увидеть их отличия. Если вы используете только одну модель, прочитайте соответствующий раздел.

Версионные представления не поддерживаются в базах данных Windows Azure SQL Database.
Редактирование версии по умолчанию (DEFAULT)
Можно использовать SQL для подключения к версии DEFAULT и редактировать версионный вид. Вам не нужно открывать сеанс редактирования. При начале редактирования вы автоматически подключаетесь к текущему состоянию версии DEFAULT.
Необходимо принимать изменения после каждой правки, чтобы избежать блокировки других пользователей, обращающихся к таблицам изменений таблицы или класса объекта.
Ниже приводится порядок изменения версионного представления (blic_еvw). Правки в этом виде записываются в таблицу изменений версионной таблицы blic. Так как изменений всего несколько, они будут внесены в версию DEFAULT.
- Подключитесь к базе данных из клиента SQL. Убедитесь, что вы подключились как пользователь с правами доступа для редактирования набора данных и версионного вида.
-
Выполните редактирование версионного вида с помощью SQL.
В этом примере обновляется существующая строка для изменения имени владельца свойства.
UPDATE blic_evw SET propowner = 'C. O. Industry' WHERE lic = 44977;
- Внесите изменения (операция COMMIT).
COMMIT;
-
Внесите следующую правку.
Новая запись будет добавлена в таблицу в версионном виде. Таблица содержит столбец геометрии (местоположение).
INSERT INTO blic_evw (propowner, date_entered, location) VALUES ( 'Moe Esposito', GETDATE(), geometry::STGeomFromText ('POINT (0.0125662 0.0046711)', 12));
Подсказка:
В выражении INSERT значение идентификатора объекта не указывается. Версионный вид автоматически получает следующий доступный идентификатор объекта и вставляет его для строки.
- Внесите изменения (операция COMMIT).
COMMIT;
Редактирование именованной версии
Вы получили ряд обновлений для класса объектов blic, поэтому вы решили выполнить правку в именованной версии.
Далее представлены хранимые процедуры, используемые для редактирования именованной версии базы геоданных, и их синтаксис:
Хранимая процедура | Цель | Синтаксис и описание |
---|---|---|
create_version | Создать именованную версию базы геоданных. Если вы редактируете именованные версии (отличные от DEFAULT), всегда изменяйте собственную версию. Несколько пользователей не могут редактировать одну именованную версию с помощью версионных видов. | EXEC {dbo | sde}.create_version '<parent_version>', '<child_version>', <name_rule>, <access>, '<description>' |
set_current_version | Укажите, к какой версии базы геоданных и состоянию нужно получить доступ. Вы получаете доступ к состоянию, на которое указывала версия при вызове set_current_version. | EXEC {dbo | sde}.set_current_version '<child_version>' |
edit_version | Откройте и завершите сеанс редактирования именованной версии. Изменения в транзакции принимаются при каждом выполнении этой процедуры. | EXEC {dbo | sde}.edit_version '<child_version>',{1 | 2} Укажите 1 для запуска сеанса редактирования. Укажите значение 2, чтобы завершить его. |
Параметры в выражениях выполнения представляют следующее:
- {dbo|sde} указывает пользователя, которому принадлежит процедура. Если ваша база данных использует схему sde, укажите sde, если используется схема dbo – введите dbo.
- <parent_version> – эта та версия базы геоданных, на основе которой создана ваша версия.
- <child_version> – это именованная версия, которую вы редактируете.
- <name_rule> указывает, следует ли использовать заданное имя версии без изменений (2), или следует создать уникальное имя при указании дублирующегося имени (1).
- <access> – это уровень разрешений версии: 0 для частного доступа, 1 для общего и 2 для защищенного.
- <description> – текстовое описание дочерней версии.
Далее на основе версии DEFAULT будет создана версия под именем myedits12111, и в нее будут внесены изменения через версионное представление blic_evw.
- Откройте окно запросов Transact-SQL и выполните процедуру create_version, чтобы создать именованную версию, в которую будут вноситься изменения.
EXEC sde.create_version 'sde.DEFAULT', 'myedits12111', 1, 2, 'version for my mv edits';
- Укажите созданную дочернюю версию для сеанса редактирования.
EXEC sde.set_current_version 'myedits12111';
-
Начните сеанс редактирования, выполнив процедуру edit_version и указав значение 1.
EXEC sde.edit_version 'myedits12111', 1;
1 указывает на то, что нужно открыть сеанс редактирования.
- Внесите правки в версионный вид с помощью SQL.
INSERT INTO blic_evw (propowner, date_entered, location) VALUES ( 'V. Nay', getdate(), geometry::STGeomFromText('point (0.0125699 0.0046700)', 12)); UPDATE blic_evw SET phone1 = '555.111.2345', phone2 = '555.111.6789' WHERE propowner = 'Tella Chomsky'; UPDATE blic_evw SET exp_date = '2020-06-30 17:00:00' WHERE lid = 22903; UPDATE blic_evw SET location = geometry::STGeomFromText('point (0.0125705 0.0046688)', 12)) WHERE lid = 8992; INSERT INTO blic_evw (codenum, propowner) VALUES (456, 'Anjo Badsu'); DELETE FROM blic_evw WHERE lid = 133;
- Примените изменения.
COMMIT;
-
Остановите сеанс редактирования, выполнив процедуру edit_version, но теперь введите значение 2. 2 указывает на то, что нужно завершить сеанс редактирования.
EXEC sde.edit_version 'myedits', 2;
Подсказка:
Вы можете изменить только одну версию в сеансе редактирования. Например, если требуется изменить вторую версию (например, mynewedits), необходимо закрыть сеанс редактирования в myedits12111, как показано на данном этапе. Затем можно выполнить set_current_version, для указания на версию mynewedits, и начать сеанс редактирования, выполнив edit_version.
Переключение с редактирования именованной версии на редактирование версии DEFAULT
Если требуется вернуться к редактированию версии DEFAULT (например, если руководитель говорит вам, что другим пользователям на участке требуется быстро внести правку), можно выполнить функцию version_user_ddl.set_default для перехода на редактирование версии DEFAULT. Правки, вносимые в версию DEFAULT, могут видеть другие пользователи, подключенные к DEFAULT, если они обновляют свои подключения.
Далее представлены хранимые процедуры, используемые для редактирования версии DEFAULT базы геоданных, и их синтаксис:
Хранимая процедура | Цель | Синтаксис и описание |
---|---|---|
set_default | Возврат к редактированию текущего состояния версии DEFAULT. Выполните эту процедуру, если вы редактировали именованную версию или определенное состояние версии DEFAULT, но хотите вернуться к редактированию текущей версии DEFAULT. | EXEC {sde | dbo}.set_default |
- В окне Transact-SQL выполните процедуру set_default.
EXEC sde.set_default;
Сеанс теперь настроен для редактирования текущего состояния, на которое ссылается версия DEFAULT.
- Измените версионное представление blic_evw.
INSERT INTO blic_evw (propowner, b_name, date_entered, location) VALUES ( 'Ruben Gol', getdate(), 'Chez Coiffure', geometry::STGeomFromText('point (0.0125650 0.0046721)', 12));
- Внесите изменения (операция COMMIT).
COMMIT;
Другие клиенты, указывающие на то же состояние версии DEFAULT или любое последующее состояние, могут обновить свои подключения, чтобы просмотреть на новый точечный объект.
Согласование и закрепление изменений в именованной версии
После внесения правок в именованную версию необходимо использовать ArcGIS для согласования, анализа и разрешения конфликтов, а затем закрепить изменения. Это можно сделать в ArcGIS for Desktop с помощью инструмента геообработки Согласовать версии (Reconcile Versions) или скрипта Python. Более подробную информацию см. в разделах:

Если редактируемые данные были зарегистрированы как версионные с опцией перемещения изменений в базу, то после согласования и закрепления внесенных изменений в версии по умолчанию (DEFAULT) эти изменения будут перемещены в базовую таблицу.
Как только изменения будут закреплены в версии DEFAULT, именованную версию можно будет удалить. Далее представлены хранимые процедуры, используемые для удаления именованной версии после согласования и закрепления изменений в версии DEFAULT базы геоданных, и их синтаксис:
Хранимая процедура | Цель | Синтаксис и описание |
---|---|---|
delete_version | Удалить версию базы геоданных. | EXEC {dbo | sde}.delete_version '<child_version>' |
В следующем примере удаляется версия myedits12111 после согласования и закрепления всех изменений в версии DEFAULT:
EXEC sde.delete_version 'myedits12111';