Mise à jour de données non versionnées de géodatabase dans SQL Server avec SQL
Vous pouvez utiliser SQL pour mettre à jour, insérer des données et supprimer des données de tables non versionnées dans la géodatabase si elles ne participent pas au comportement de la géodatabase. Reportez-vous à la rubrique Type de données pouvant être modifié avec SQL pour plus d'informations sur les types de données et de comportement de géodatabase que vous ne pouvez pas modifier avec SQL.
Toutes les données enregistrées avec la géodatabase possèdent une colonne d'identifiant d'objet (ID de ligne) gérée par le système, unique et non nulle. Lorsque vous utilisez SQL pour insérer des enregistrements dans des tables non versionnées de la géodatabase, vous devez fournir une valeur unique pour la colonne d'identifiant d'objet.
Pour obtenir ces informations, interrogez la table système sde_table_registry d'ArcSDE pour obtenir l'ID d'enregistrement de la table dans laquelle vous souhaitez insérer un enregistrement. Une fois que vous avez l'ID d'enregistrement, vous pouvez identifier la table i correspondant à la table, car les tables i sont associées à leur table métier par le biais de l'ID d'enregistrement. La table i est stockée dans la structure de l'utilisateur qui possède la table correspondante.
Exécutez la procédure i<registration_id>_get_id pour obtenir la valeur du prochain identifiant d'objet disponible. Utilisez ensuite cette valeur dans votre instruction INSERT pour renseigner la colonne d'identifiant d'objet de l'enregistrement.
-
Connectez-vous à un éditeur SQL, tel que l'éditeur SQL de Microsoft SQL Server Management Studio.
Connectez-vous à la base de données avec un nom d'utilisateur autorisé à modifier les données.
-
Interrogez la table système SDE_table_registry pour déterminer l'ID d'enregistrement de la table métier dans laquelle vous souhaitez insérer un enregistrement.
Dans cet exemple, la table métier s'appelle farmland et le propriétaire de la table est gisdata4.
SELECT registration_id FROM dbo.SDE_table_registry WHERE table_name = 'farmland' and owner = 'gisdata4'; registration_id 71
L'ID d'enregistrement de la table métier gisdata4.farmland est 71.
-
Utilisez la procédure i71_get_id pour obtenir une valeur pour la colonne d'identifiant d'objet.
DECLARE @id as integer DECLARE @num_ids as integer EXEC dbo.i71_get_ids 2, 1, @id output, @num_ids output;
La valeur 2 après la procédure est une constante qui indique que vous souhaitez renvoyer un identifiant d'objet. N'utilisez pas d'autre valeur à cet endroit. La valeur 1 indique que vous voulez qu'un identifiant d'objet soit renvoyé par la table i71. Comme vous ne mettez à jour qu'un seul enregistrement, vous avez besoin d'un seul identifiant d'objet.
-
Utilisez la valeur renvoyée par l'instruction précédente pour renseigner la colonne d'identifiant d'objet de l'enregistrement que vous insérez.
Dans cet exemple, fid est la colonne d'identifiant d'objet.
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));