使用 SQL 访问企业级地理数据库数据
可以使用数据库管理系统的原生 SQL 从企业级地理数据库中的表和要素类(统称为数据集)读取数据。还可以使用 SQL 对存储在企业级地理数据库中的简单数据集插入、删除和更新值。

请勿使用 SQL 更改存储在企业级地理数据库中的数据集方案。
对地理数据库数据集执行 SQL 时,也是在基表(或业务表)中查询数据。如果所查询的数据集满足以下条件,则查询基表就足以查询到数据,并且可以使用 SQL 在基表中更新数据、插入记录或删除记录:
- 数据集不参与地理数据库功能(如注记、复制、网络、宗地结构、关系类、逻辑示意图数据集、子类型、属性域、地形或拓扑)。
- 数据集尚未注册为版本。
- 数据集不可用于存档。
- 数据集不含二进制几何数据类型或 ArcSDE XML 数据类型列。
以下部分介绍数据集不满足这些条件时应采取的操作。
数据集参与地理数据库功能
如果要访问的数据参与了地理数据库功能,您所构造的查询必须包含所需的关联表,然后使用正确的列将这些表连接起来以便查询关联表中的信息。
可使用 Is_Simple 函数确定数据集是否参与地理数据库功能。如果 Is_Simple 返回 False,则可对数据集执行 SQL SELECT 语句,但请勿使用 SQL 编辑数据集。
数据集已注册为版本
如果数据集已注册为版本,可使用版本化视图查询该数据集并查看基表、添加表和删除表中的数据,而无需编写复杂的连接语句。在 ArcGIS 10.1 和更高版本中,在将数据集注册为版本时创建版本化视图。对于在 ArcGIS 10.1 之前版本化的数据集或在无权创建视图时版本化的数据集,可通过 ArcGIS for Desktop 中的表或要素类快捷菜单将此类数据集用于 SQL 访问,从而创建一个版本化视图。
如果要使用 SQL 编辑版本化数据集,必须通过版本化视图进行编辑。这会将编辑内容写入添加表和删除表,并在插入记录时填充 ObjectID 字段。
可以使用 Is_Versioned 函数确定是否将数据集注册为版本。如果注册为版本,使用 Version_View_Name 函数可确定版本化视图的名称。
数据集未注册为版本但已用于存档
如果数据集未注册为版本但已用于存档,启用存档时将创建存档视图。
如果要使用 SQL 编辑已启用存档的非版本化数据集,必须通过存档视图进行编辑。这样做会自动更新在更新要素或记录时追踪的字段以及 ObjectID 字段。

如果在启用存档时无权创建视图,当被授予在数据库中创建视图的权限后,可通过 ArcGIS for Desktop 中的表或要素类快捷菜单启用 SQL 访问(从而创建存档视图)。
如果 Is_Versioned 函数返回 False,使用 Is_Archive_Enabled 函数确定是否将非版本化数据集用于存档。如果将其用于存档,使用 Archive_View_Name 函数可确定存档视图的名称,并可使用该名称通过 SQL 编辑数据集。
数据集包含二进制几何或 ArcSDE XML 列
如果要访问的数据使用二进制几何存储或 ArcSDE XML,您所构造的查询必须包含所需的关联表,然后使用正确的列将这些表连接起来以便查询关联表中的信息。
请勿使用 SQL 编辑包含二进制几何存储或 ArcSDE XML 数据类型列的数据集。