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 列に値を設定します。
-
Microsoft SQL Server Management Studio の SQL エディタのような 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 プロシージャを使用して、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 個だけです。
-
先のステートメントで返された値を使用して、挿入するレコードの 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));