在 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 列。
步骤:
-
登录到 SQL 编辑器,例如 Microsoft SQL Server Management Studio 中的 SQL 编辑器。
请确保以拥有数据编辑权限的用户身份登录到数据库。
-
查询 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。
-
使用 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。
-
使用从前一个语句返回的值填充所插入记录的对象 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