ArcGIS 中使用的所有表和要素类必须包含一个能够唯一标识每行或每个要素的字段。
要在 ArcGIS 桌面应用程序中使用某字段作为唯一标识符,该字段必须不为空、包含唯一值,并且属于以下数据类型之一:
- 整型(仅限 32 位和 64 位正值)
- 字符串
- GUID
- 日期型
该字段中的值必须始终唯一且不为空。 您必须确保字段中的值满足这些要求。
注:
ArcGIS 遇到空值时,您将接收到一个错误信息,不过,ArcGIS 并不强制要求查询图层或数据库表中使用的唯一标识符字段中各值的唯一性。 如果 ArcGIS 遇到不唯一的值,它不会返回任何错误;但是,可能会在 ArcGIS 的选择集或其他查询中发现不一致的结果。
要在引用已注册数据存储的要素图层(要素服务)中发布查询图层,则 ID 必须是单个、非空、唯一且自动递增的 32 位整型字段。
当您拖动数据库表到地图上或验证查询图层定义时,ArcGIS 会默认将它找到的第一个非空字段设置为唯一标识符字段。您可以使用该字段,也可以修改查询定义并选择另一字段或字段组作为唯一标识符。
使用单个字段作为唯一标识符
如果指定单个整型字段作为唯一标识符,则 ArcGIS 会直接使用该字段中的值来唯一标识数据库表中的所有要素和行。
如果数据库表中没有可以用作唯一标识符的字段,且您正在使用 Dameng、IBM Db2、Microsoft SQL Server、Oracle 或 PostgreSQL 数据库,那么可以运行添加增量 ID 字段地理处理工具向表中添加唯一标识符整型字段。
如果将单个字符串字段用作唯一标识符,则 ArcGIS 必须将这些唯一值映射到一个整数。在系统需要使用对象 ID 属性的任何时候(例如,创建地图选择内容或打开属性表时)均可在 ArcGIS 中完成此操作。ArcGIS 可以添加名为 ESRI_OID 的属性并在其中存储唯一整数值。该属性只是图层定义的一部分;基础数据库表并未发生更改。
使用复合唯一标识符
可以选择单个字段或多个字段来定义唯一标识符。如果选择使用多个字段,那么这些字段中的组合值必须是唯一的。以下示例显示了两个文本字段,分别是 member_surname 和 signup_date。单独来看,这些字段中的值可能不是唯一的。但将它们组合使用时,这些值是唯一的,如下所示:
member_surname | signup_date |
---|---|
alfred | 2006-09-28 10:15:41 |
dewey | 2006-09-28 10:15:56 |
johnson | 2000-02-19 09:14:50 |
johnson | 2004-12-08 11:02:32 |
mujan | 2011-07-07 12:44:21 |
这些值的组合将用作生成唯一整数值的键,该整数值将存储在名为 ESRI_OID 的属性中。该属性只是图层定义的一部分;基础数据库表并未发生更改。
前一示例中的图层定义将包括 ESRI_OID 列,如下所示:
member_surname | signup_date | ESRI_OID |
---|---|---|
alfred | 2006-09-28 10:15:41 | 1 |
dewey | 2006-09-28 10:15:56 | 2 |
johnson | 2000-02-19 09:14:50 | 3 |
johnson | 2004-12-08 11:02:32 | 4 |
mujan | 2011-07-07 12:44:21 | 5 |
请注意,如果指定的多个字段的组合值或单个文本字段不是唯一的,那么 ArcGIS 会将这些行解释为相同,并会将其映射到同一个 ESRI_OID 值。
如果表中已包含一个名为 ESRI_OID 的字段,则会向图层定义添加一个名为 ESRI_OID_1 的属性。
注:
不能发布包含了使用复合唯一标识符的要素类的可编辑要素服务(web 要素图层)。