在 SQL Server 中使用 SQL 编辑非版本化的地理数据库 (geodatabase) 数据

如果数据不参与地理数据库行为,则可在地理数据库中使用 SQL 更新数据、将数据插入非版本化表或从其中删除数据。有关无法使用 SQL 编辑的数据类型和地理数据库行为类型的详细信息,请参阅可使用 SQL 编辑何种数据类型?

已注册到地理数据库的所有数据都具有由系统维护的唯一非空对象 ID(行 ID)列。在地理数据库中使用 SQL 将记录插入非版本化表时,必须为对象 ID 提供唯一的值。

要获取此信息,请查询 sde_table_registry ArcSDE 系统表以获取要插入记录的表的注册 ID。拥有注册 ID 之后,可标识与该表对应的 i 表,因为 i 表与其业务表通过注册 ID 相关联。i 表存储在拥有对应表的用户的方案中。

执行 i<registration_id>_get_id 过程获得下一个可用对象 ID 值。然后在 INSERT 语句中使用该值来填充记录的对象 ID 列。

步骤:
  1. 登录到 SQL 编辑器,例如 Microsoft SQL Server Management Studio 中的 SQL 编辑器。

    请确保以拥有数据编辑权限的用户身份登录到数据库。

  2. 查询 SDE_table_registry 系统表,确定要插入记录的业务表的注册 ID。

    在此例中,业务表为 farmland,表的所有者为 gisdata4。

    SELECT registration_id
    FROM dbo.SDE_table_registry
    WHERE table_name = 'farmland' and owner = 'gisdata4';
    
    registration_id
          71

    gisdata4.farmland 业务表的注册 ID 为 71。

  3. 使用 i71_get_id 过程获取对象 ID 列的值。
    DECLARE @id as integer
    DECLARE @num_ids as integer
    EXEC dbo.i71_get_ids 2, 1, @id output, @num_ids output; 

    过程后面的 2 为常量,用于指示希望返回对象 ID。请勿在此位置使用任何其他值。1 指示希望从 i71 表中返回一个对象 ID。由于正在更新的只是一条记录,所以仅需要一个对象 ID。

  4. 使用从前一个语句返回的值填充所插入记录的对象 ID 列。

    在此例中,fid 为对象 ID 列。

    INSERT INTO gisdata4.farmland (fid,crop,shape)
    VALUES (
    @id,
    'oats',
    geography::STGeomFromText('POLYGON((-111.85897004 33.25178949,
    -111.86899617 33.25065270, -111.86887014 33.25062350,
    -111.85884555 33.25176951, -111.85897004 33.25178949))', 4267));

相关主题


3/7/2012