Bearbeiten nicht versionierter Geodatabase-Daten in SQL Server per SQL
Mithilfe von SQL können Sie Daten in der Geodatabase aktualisieren, Daten in die Geodatabase einfügen und Daten aus nicht versionierten Tabellen daraus löschen, falls diese nicht an Geodatabase-Verhalten beteiligt sind. Unter Welcher Datentyp kann mit SQL bearbeitet werden? finden Sie Informationen zu den Typen von Daten und Geodatabase-Verhalten, die Sie nicht per SQL bearbeiten können.
Alle Daten, die unter der Geodatabase registriert sind, verfügen über eine vom System verwaltete, eindeutige Objekt-ID-Spalte (Zeilen-ID), die nicht null ist. Wenn Sie SQL zum Einfügen von Datensätzen in nicht versionierte Tabellen in der Geodatabase verwenden, müssen Sie für die Objekt-ID einen Einzelwert eingeben.
Um diese Informationen zu erhalten, fragen Sie die ArcSDE-Systemtabelle "sde_table_registry" ab und rufen so die Registrierungs-ID der Tabelle ab, in die Sie einen Datensatz einfügen möchten. Nachdem Sie die Registrierungs-ID erhalten haben, können Sie die entsprechende I-Tabelle der Tabelle identifizieren, da I-Tabellen mit ihrer Business-Tabelle über die Registrierungs-ID verknüpft sind. Die I-Tabelle wird im Schema des Benutzers gespeichert, der die entsprechende Tabelle besitzt.
Führen Sie die Prozedur "i<registration_id>_get_id procedure" aus, um den nächsten verfügbaren Objekt-ID-Wert abzurufen. Verwenden Sie diesen Wert dann in der INSERT-Anweisung, um die Objekt-ID-Spalte für den Datensatz aufzufüllen.
-
Melden Sie sich an einem SQL-Editor an, z. B. dem SQL-Editor in Microsoft SQL Server Management Studio.
Melden Sie sich bei der Datenbank als Benutzer an, der über die Berechtigung zum Bearbeiten der Daten verfügt.
-
Fragen Sie die Systemtabelle "SDE_table_registry" ab, um die Registrierungs-ID der Business-Tabelle zu ermitteln, in die Sie einen Datensatz einfügen möchten.
In diesem Beispiel ist die Business-Tabelle "farmland", und der Besitzer der Tabelle ist "gisdata4".
SELECT registration_id FROM dbo.SDE_table_registry WHERE table_name = 'farmland' and owner = 'gisdata4'; registration_id 71
Die Registrierungs-ID für die Business-Tabelle "gisdata4.farmland" lautet 71.
-
Verwenden Sie die Prozedur "i71_get_id", um einen Wert für die Objekt-ID-Spalte abzurufen.
DECLARE @id as integer DECLARE @num_ids as integer EXEC dbo.i71_get_ids 2, 1, @id output, @num_ids output;
Die "2" nach der Prozedur ist eine Konstante, die angibt, dass eine Objekt-ID zurückgegeben werden soll. Verwenden Sie hierfür keinen anderen Wert. Der Wert "1" gibt an, dass eine Objekt-ID aus der Tabelle "i71" zurückgegeben werden soll. Da Sie nur einen Datensatz aktualisieren, benötigen Sie nur eine Objekt-ID.
-
Verwenden Sie den von der vorherigen Anweisung zurückgegebenen Wert, um die Objekt-ID-Spalte für den eingefügten Datensatz aufzufüllen.
In diesem Beispiel ist "fid" die Objekt-ID-Spalte.
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));