SQL を使用した SQL Server でのバージョン対応データの編集

複雑性: 初級 データ要件: 独自データの使用

Microsoft SQL Server のジオデータベース内のバージョン対応登録されたデータを編集するには、バージョン対応ビューから名前付きバージョンを編集する方法と、バージョン対応ビューから DEFAULT バージョンを編集する方法の 2 つがあります。それぞれの編集モデルの説明については、「SQL を使用したバージョン対応データの編集の概要」をご参照ください。

ほとんど場合、使用する編集モデルは 1 つだけです。ただし、同じシステムで両方のモデルを使用することも可能です。そのため、このワークフローでは、この 2 つの編集モデルの切り替え方法がわかるように、両方の使用方法を説明します。1 つだけを使用する場合は、使用する編集モデルのセクションをお読みください。

注意注意:

バージョン対応ビューは、Windows Azure SQL Database データベースではサポートされていません。

DEFAULT バージョンの編集

SQL を使用して DEFAULT バージョンに接続し、バージョン対応ビューを編集することができます。編集セッションを開く必要はありません。編集を開始すると、DEFAULT バージョンの現在の状態に自動的に接続されます。

編集後は、テーブルまたはフィーチャクラスの差分テーブルに他のユーザがアクセスできるようにコミットする必要があります。

次の手順では、バージョン対応ビュー(blic_vw)を編集します。このビューへの編集内容は、バージョン対応登録された blic テーブルの差分テーブルに書き込まれます。編集は数か所しかないため、DEFAULT バージョンに対して行われます。

手順:
  1. SQL クライアントからデータベースに接続します。必ず、データセットとバージョン対応ビューを編集できる権限を持つユーザとして接続してください。
  2. SQL を使用してバージョン対応ビューに最初の編集を実行します。

    この例では、既存の行が更新され、所有者名のプロパティが変更されています。

    UPDATE blic_vw 
    SET propowner = 'C. O. Industry' 
    WHERE lic = 44977;
    
  3. 編集をコミットします。
    COMMIT;
    
  4. 次の編集を行います。

    バージョン対応ビューを通して、新しいレコードがテーブルに追加されます。テーブルにはジオメトリ列(location)があります。

    INSERT INTO blic_vw (propowner, date_entered, location)
    VALUES (
      'Moe Esposito', 
      GETDATE(), 
      geometry::STGeomFromText ('POINT (0.0125662 0.0046711)', 12));
    
    ヒントヒント:

    INSERT ステートメントでは ObjectID 値を指定しません。バージョン対応ビューでは、使用可能な ObjectID が自動的に取得されて行に挿入されます。

  5. 編集をコミットします。
    COMMIT;
    

名前付きバージョンの編集

blic フィーチャクラスに更新内容が多数ある場合は、名前付きバージョンでの編集が適しています。

ジオデータベースの名前付きバージョンを編集するのに使用するストアド プロシージャと構文は次のとおりです。

ストアド プロシージャ

目的

構文と説明

create_version

ジオデータベースの名前付きバージョンを作成します。

名前付きバージョン(DEFAULT 以外のバージョン)を編集している場合は、必ず独自の個別バージョンを編集します。複数の編集者がバージョン対応ビューを使用して同じ名前付きバージョンを編集することはできません。

EXEC {dbo | sde}.create_version '<parent_version>', '<child_version>', <name_rule>, <access>, '<description>'

set_current_version

アクセスするジオデータベース バージョンとステートを設定します。

set_current_version を実行したとき、バージョンが指している状態にアクセスします。

EXEC {dbo | sde}.set_current_version '<child_version>'

edit_version

名前付きバージョンでの編集セッションを開始および終了します。

トランザクション内の編集データは、このプロシージャを実行したときにコミットされます。

EXEC {dbo | sde}.edit_version '<child_version>',{1 | 2}

編集セッションを開始するときは、1 を指定します。終了するときは 2 を指定します。

実行ステートメントのパラメータは次のとおりです。

  • {dbo|sde} は、プロシージャを所有するユーザを示します。sde スキーマ ジオデータベースの場合、sde を使用します。dbo スキーマ ジオデータベースの場合、dbo を使用します。
  • <parent_version>: バージョンの作成元となるバージョンです。
  • <child_version>: 編集用に作成する名前付きバージョンです。
  • <name_rule>: バージョン用に指定された名前をそのまま使用するか(2)、それとも、重複する名前が指定されたときは一意の名前を作成するか(1)を示します。
  • <access>: バージョンの権限レベルです。0 はプライベート、1 はパブリック、2 はプロテクトを表します。
  • <description>: 子バージョンの説明です。

次の手順では、DEFAULT バージョンから名前付きバージョン(myedits12111)が作成され、blic_vw バージョン対応ビューを通してこのバージョンに編集が加えられています。

手順:
  1. Transact-SQL クエリ ウィンドウを開いて、create_version プロシージャを実行し、編集を実行する名前付きバージョンを作成します。
    EXEC sde.create_version 'sde.DEFAULT', 'myedits12111', 1, 2, 'version for my mv edits';
    
  2. 作成した子バージョンに対して編集セッション用のバージョンを設定します。
    EXEC sde.set_current_version 'myedits12111';
    
  3. 1 を指定して edit_version ストアド プロシージャを実行して、編集セッションを開始します。
    EXEC sde.edit_version 'myedits12111', 1;
    

    1 は編集セッションの開始を意味します。

  4. SQL を使用して、バージョン対応ビューに一連の編集を実行します。
    INSERT INTO blic_vw (propowner, date_entered, location)
    VALUES (
      'V. Nay', 
      getdate(), 
      geometry::STGeomFromText('point (0.0125699 0.0046700)', 12));
    
    UPDATE blic_vw 
    SET phone1 = '555.111.2345', phone2 = '555.111.6789' 
    WHERE propowner = 'Tella Chomsky';
    
    UPDATE blic_vw
    SET exp_date = '2020-06-30 17:00:00'
    WHERE lid = 22903;
    
    UPDATE blic_vw
    SET location = geometry::STGeomFromText('point (0.0125705 0.0046688)', 12))
    WHERE lid = 8992;
    
    INSERT INTO blic_vw 
    (codenum, propowner) 
    VALUES (456, 'Anjo Badsu');
    
    DELETE FROM blic_vw
    WHERE lid = 133;
    
  5. 編集をコミットします。
    COMMIT;
    
  6. SQL で編集をさらに実行します。次の一連の編集が終了したら、編集セッションを閉じます。
  7. 2 を指定して edit_version ストアド プロシージャを実行し、編集セッションを終了します。2 は編集セッションの終了を意味します。
    EXEC sde.edit_version 'myedits', 2;
    
    ヒントヒント:

    1 回の編集セッションで編集できるバージョンは 1 つだけです。たとえば、2 つめのバージョン(mynewedits など)を編集する場合、この手順で示したように、myedits12111 の編集セッションを閉じる必要があります。その後、set_current_version を実行して mynewedits バージョンを指し示し、edit_version を実行して編集セッションを開始します。

名前付きバージョンの編集から DEFAULT の編集への切り替え

たとえば、サイトの他のユーザが特定の編集データを即座に参照する必要があるとマネージャから言われた場合など、DEFAULT バージョンに戻って直接編集する必要がある場合は、version_user_ddl.set_default を実行して、DEFAULT バージョンの編集に戻ることができます。DEFAULT に接続している他のユーザは、クライアント接続を更新すると、ただちに DEFAULT に加えられた編集を参照することができます。

ジオデータベースの DEFAULT バージョンを編集するのに使用するストアド プロシージャと構文は次のとおりです。

ストアド プロシージャ

目的

構文と説明

set_default

DEFAULT バージョンが参照しているステートに対する編集に戻ります。

名前付きバージョンまたは DEFAULT バージョンの特定の状態を編集していて、DEFAULT の現在のバージョンに対する編集に戻りたい場合、このプロシージャを実行します。

EXEC {sde | dbo}.set_default

手順:
  1. Transact-SQL ウィンドウで、set_default プロシージャを実行します。
    EXEC sde.set_default;
    

    これで、セッションは、DEFAULT バージョンが参照している現在の状態を編集するように設定されます。

  2. blic_vw バージョン対応ビューを編集します。
    INSERT INTO blic_vw (propowner, b_name, date_entered, location)
    VALUES (
      'Ruben Gol', 
      getdate(), 
      'Chez Coiffure',
      geometry::STGeomFromText('point (0.0125650 0.0046721)', 12));
    
  3. 編集をコミットします。
    COMMIT;
    

    DEFAULT バージョンの同じ状態や、その系統の状態を指している他のクライアントは、接続を更新すると、新しいポイント フィーチャを表示できます。

名前付きバージョンの編集のリコンサイルとポスト

名前付きバージョンでの編集が終了したら、ArcGIS を使用して、編集データのリコンサイル、競合の確認および解決、ポストを実行する必要があります。これは、ArcGIS for Desktop[バージョンのリコンサイル(Reconcile Versions)] ジオプロセシング ツールまたは Python スクリプトを使用して実行します。詳細については、以下のトピックをご参照ください。

ヒントヒント:

編集しているデータが、編集データをベーステーブルに移動するオプションを選択した状態でバージョン対応登録されている場合、リコンサイルして DEFAULT バージョンへポストした後に、編集データはベース テーブルに移行されます。

編集データが DEFAULT バージョンにポストされたら、名前付きバージョンは削除できます。ジオデータベースの DEFAULT バージョンにリコンサイルおよびポストした後に、名前付きバージョンを削除するのに使用するストアド プロシージャと構文は次のとおりです。

ストアド プロシージャ

目的

構文と説明

delete_version

ジオデータベース バージョンを削除します。

EXEC {dbo | sde}.delete_version '<child_version>'

次の例では、すべての編集データが DEFAULT バージョンにリコンサイルおよびポストされた後で、myedits12111 バージョンを削除しています。

EXEC sde.delete_version 'myedits12111';

関連トピック

9/14/2013