在 SQL Server 中使用多版本化视图和 SQL 编辑版本化数据
可通过编辑基于数据创建的多版本化视图来编辑地理数据库中的版本化数据。
有若干个随 ArcSDE 安装的存储过程,用于帮助处理多版本化视图。这些组件及其描述如下:
存储过程 |
用途 |
语法和描述 |
---|---|---|
create_version |
创建新的地理数据库版本。 请始终编辑您自己的单独版本;使用多版本化视图时,多个编辑器无法编辑同一个版本。 |
EXEC {dbo | sde}.create_version '<parent_version>', '<child_version>', <name_rule>, <access>, '<description>'
|
set_current_version |
设置将访问的地理数据库版本。 |
EXEC {dbo | sde}.set_current_version '<version_name>'
|
edit_version |
启动和结束编辑会话。 |
EXEC {dbo | sde}.edit_version '<version_name>',{1 | 2} 指定 1 启动编辑会话。指定 2 结束编辑会话。 |
delete_version |
删除地理数据库版本。 |
EXEC {dbo | sde}.delete_version '<version_name>' |
通过多版本化视图编辑版本化表时,增量表也会随之变化,并且会自动生成新记录的行 ID(对象 ID)值。不过,与在 ArcGIS 编辑会话中编辑版本化数据不同,不会对这些编辑进行内部版本协调。
此外,在多版本化视图中启动编辑会话时,将在版本所引用的状态中放置排它锁。因此,强烈建议不要将多版本化视图用于编辑 DEFAULT 版本或者任何可能由其他用户的同步编辑或协调的版本,因为多版本化视图不会检测冲突,同时,放置的排它锁还会阻止其他用户的编辑。应该专门为多版本化视图编辑会话创建自有版本。
- 必须使用 ArcGIS 软件来执行版本管理操作,例如协调、解决冲突和提交。不适当的版本管理在处理视图时可导致地理数据库损坏。
- 切勿使用数据库管理系统 (DBMS) 工具来更新数据库中由 ArcSDE 维护的任何行 ID(对象 ID)字段。这些对象 ID 字段由地理数据库进行分配和管理,因此不应使用 SQL 进行更改。
- 切勿使用 SQL 编辑地理数据库的 DEFAULT 版本。对一个版本启动编辑会话会对此版本所引用的状态设置排它锁。如果锁定 DEFAULT 版本,将阻止 ArcGIS 用户连接到地理数据库。
下列步骤指导您创建多版本化视图、创建用于执行编辑的版本、设置要编辑的版本、启动编辑会话、利用多版本化视图执行某些编辑、停止编辑会话、提交编辑到数据库以及删除针对编辑创建的版本。在这些示例中,为对表执行编辑而创建的多版本化视图是 code_mv,为编辑而创建和使用的版本是 mvedits。
请记住,通过多版本化视图编辑的数据集必须已注册为版本。
-
在 MS-DOS 命令提示符处,执行 sdetable 工具以创建多版本化视图。
sdetable –o create_mv_view –T code_mv –t code_enf –i sde:sqlserver:myserver\ssinst –D code –u sarja –p not4u
-
可使用 create_version 过程创建用于执行编辑的版本。
EXEC sde.create_version 'sde.DEFAULT', 'version2', 1, 2, 'version for my mv edits'
-
打开 Transact SQL 查询窗口并执行 set_current_version 存储过程。
EXEC sde.set_current_version 'version2'
注意:如果未设置当前版本,您将在每次进行查询时看到 DEFAULT 版本的最新状态。如果设置了当前版本,则将对状态进行缓存,而您指定的版本的视图保持不变。
-
通过执行 edit_version 存储过程并指定 1 来启动编辑会话。
EXEC sde.edit_version 'version2', 1
1 表示应启动编辑会话。
-
使用 SQL 对多版本化视图执行第一次编辑。
在此例中,对现有记录进行了更新。
UPDATE code_mv SET propowner = 'C. Industry' WHERE vid = 2233
-
使用 SQL 对多版本化视图执行下一次编辑。
在此例中,一条记录被插入表中。
INSERT INTO code_mv (codenum, propowner) VALUES (456, 'Anjo Badsu')
提示:在 INSERT 语句中未指定对象 ID 值;多版本视图会自动获取下一个可用对象 ID,然后为行插入该 ID。
对于仅注册到 ArcSDE 并且拥有用户维护的对象 ID 列的表,尽管可以对其进行版本化,但并不推荐进行这种操作。但是,如果坚持这样操作,则必须为 INSERT 语句提供对象 ID;多版本化视图无法生成值。
-
通过执行 edit_version 存储过程并指定 2 来停止编辑会话。
EXEC sde.edit_version 'version2', 2
2 表示应结束编辑会话。
-
完成所有编辑操作后,通过 ArcGIS Desktop 协调和提交编辑,然后删除在步骤 2 中创建的地理数据库版本。如果决定放弃所做的更改,则不必协调和提交编辑,直接删除在步骤 2 中创建的版本即可。
EXEC sde.delete_version 'version2'