Vous pouvez utiliser SQL pour créer une vue sur des tables et des classes d’entités dans une géodatabase d’entreprise afin de restreindre les colonnes et les enregistrements disponibles pour l’affichage des utilisateurs ou définir une vue pour joindre les informations provenant de deux tables ou d’une classe d’entités et d’une table. Lorsque vous incluez la colonne spatiale dans la définition de la vue, les utilisateurs de la vue peuvent visualiser les entités dans une carte dans un client ArcGIS Desktop.
Les exemples de cette rubrique présentent comment utiliser SQL pour créer des vues créées dans une base de données Microsoft SQL Server. Une vue limite l’accès utilisateur aux colonnes spécifiques. L’autre vue présente le contenu de deux tables différentes. Les exemples sont basés sur les tables avec les définitions suivantes :
Définition de table pour les employés
CREATE TABLE employees (
emp_id integer not null,
emp_name nvarchar(32),
department smallint not null,
hire_date datetime2 not null
);
Définition de table pour les régions
CREATE TABLE regions( objectid integer not null, emp_id integer not null, reg_id integer not null, rname varchar(32), region geometry
);
Accorder des privilèges sur les tables
Si l’utilisateur qui crée la vue n’est pas le propriétaire de la table ou des tables sur lesquelles la vue repose, le propriétaire des tables doit au moins accorder au créateur de la vue les privilèges nécessaires pour réaliser des sélections dans les tables.
Dans cet exemple, les tables sur lesquelles reposent les vues (employés et régions) sont la propriété de l’utilisateur gdb. L’utilisateur qui crée les vues est l’utilisateur rocket.
GRANT SELECT
ON gdb.employees
TO rocket;
GRANT SELECT
ON gdb.regions
TO rocket;
Créer une vue pour limiter l’accès
Dans cet exemple, l’utilisateur rocket crée une vue (view_dept_201) sur la table des employés afin de limiter l’accès aux seules lignes où le département a la valeur 201 :
CREATE VIEW view_dept_201
AS SELECT emp_id, name, hire_date
FROM gdb.employees
WHERE department = 201;
Créer une vue pour joindre deux tables
Dans cet exemple, la vue emp_regions_view joint une table spatiale (classe d’entités) à une table non spatiale en fonction de la colonne emp_id. Cette vue inclut l’ObjectID, la colonne spatiale (region) et le nom de la région (rname) de la classe d’entités regions, ainsi que le nom et l’ID des employés issus de la table employees.
CREATE VIEW emp_regions_view
AS SELECT (e.emp_name,e.emp_id,r.objectid,r.rname,r.region)
FROM employees e, regions r
WHERE e.emp_id = r.emp_id;
Accorder des privilèges sur les vues
Vous pouvez accorder des privilèges sur les vues à des utilisateurs spécifiques sans devoir leur accorder l’accès aux tables de base (employees et regions). Dans cet exemple, les privilèges SELECT sont accordés à l’utilisateur dispatch_mgr sur les deux vues :
GRANT SELECT ON rocket.view_dept_201 TO dispatch_mgr;
GRANT SELECT ON rocket.emp_regions_view
TO dispatch_mgr;
L’utilisateur dispatch_mgr peut désormais accéder à view_dept_201 pour visualiser les enregistrements des employés de tous les employés du département 201, ainsi qu’à emp_region_view à partir d’une connexion à une base de données dans ArcMap ou ArcGIS Pro pour afficher toutes les régions. Lorsque dispatch_mgr interroge une région de la vue, ArcGIS renvoie le nom de la région, ainsi que le nom et l’ID de tous les employés de cette région.