SQL Server のバージョン非対応ジオデータベース データの SQL による編集

ジオデータベースのバージョン非対応テーブルのデータがジオデータベースの振舞いに関与しない場合、そのデータに対して SQL による更新、挿入、削除操作を実行できます。SQL を使用して編集できないデータ タイプとジオデータベースの振舞いについては、「SQL を使用して編集可能なデータの種類」をご参照ください。

ジオデータベースに登録されたデータはすべて、システムによって保守される null でない一意の object ID(行 ID)列を持ちます。SQL を使用してジオデータベースのバージョン非対応テーブルにレコードを挿入するときは、object ID 用の一意な値を設定する必要があります。

この情報を取得するには、ArcSDE の sde_table_registry システム テーブルをクエリして、レコードを挿入するテーブルの登録 ID を取得します。登録 ID を取得したら、テーブルに対応する i テーブルを特定できます。i テーブルは登録 ID 経由でビジネス テーブルに関連付けられているためです。i テーブルは対応するテーブルを所有するユーザのスキーマに格納されています。

i<registration_id>_get_id プロシージャを実行して、次に使用可能な object ID 値を取得します。次に、その値を INSERT ステートメントで指定して、レコードの object ID 列に値を設定します。

手順:
  1. Microsoft SQL Server Management Studio の SQL エディタのような 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 プロシージャを使用して、object ID 列の値を取得します。
    DECLARE @id as integer
    DECLARE @num_ids as integer
    EXEC dbo.i71_get_ids 2, 1, @id output, @num_ids output; 

    プロシージャの後ろの 2 という値は、object ID を返すことを表す定数です。ここでは他の値を使用しないでください。その次の 1 という値は、i71 テーブルから object ID を 1 個返すことを示しています。1 件のレコードだけを更新するため、必要な object ID は 1 個だけです。

  4. 先のステートメントで返された値を使用して、挿入するレコードの object ID 列に値を設定します。

    この例では、fid が object 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));

関連項目


7/10/2012