Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : SQL Server 2019 (15.x)
Retourne la liste des objets de la table qui sont disponibles pour être virtualisés.
Conventions de la syntaxe Transact-SQL
Syntaxe
sys.sp_data_source_objects
[ @data_source = ] N'data_source'
[ , [ @object_root_name = ] N'object_root_name' ]
[ , [ @max_search_depth = ] max_search_depth ]
[ , [ @search_options = ] N'search_options' ]
[ ; ]
Arguments
[ @data_source = ] N’data_source'
Nom de la source de données externe à partir de laquelle les métadonnées doivent être obtenues. @data_source est sysname, sans valeur par défaut.
[ @object_root_name = ] N’object_root_name'
Racine du nom de l’objet ou des objets à rechercher.
@object_root_name est nvarchar(max), avec la valeur par défaut NULL.
Cet appel retourne uniquement les objets externes qui commencent par la valeur définie pour @object_root_name.
Si une source de données ODBC se connecte à un système de gestion de base de données relationnelle (SGBDR) qui utilise des noms en trois parties, @object_root_name ne peut pas contenir un nom de base de données partiel. Dans ces cas, le paramètre @object_root_name doit contenir les trois parties, la troisième étant le nom de l'objet à rechercher.
Attention
En raison des différences entre les plateformes de données externes, certaines plateformes ne retournent aucun résultat si la valeur par défaut de NULL est fournie. Certaines plateformes considèrent que NULL correspond à l'absence de filtre. Par exemple, Oracle RDMBS ne renverra pas de résultats si NULL est fourni pour @object_root_name.
[ @max_search_depth = ] max_search_depth
Cette valeur spécifie la profondeur maximale (en parties) au-delà de la @object_root_name que vous souhaitez rechercher.
@max_search_depth est int, avec la valeur par défaut 1.
Par exemple, un @max_search_depth de 1, avec un @object_root_name qui est le nom d'une base de données SQL Server, retournera les schémas contenus dans la base de données.
Une @max_search_depth de NULL retourne des informations sur @object_root_name s’il existe et n’est pas vide, dans le cas d’un catalogue ou d’un schéma.
[ @search_options = ] N’search_options'
Identifié à titre d'information uniquement. Non pris en charge. La compatibilité future n'est pas garantie.
Jeu de résultats
| Nom de la colonne | Type de données | Description |
|---|---|---|
OBJECT_TYPE |
nvarchar(200) | Type de l’objet (Exemple : TABLE ou DATABASE). |
OBJECT_NAME |
nvarchar(max) | Nom complet de l'objet. Échappé à l'aide d'un caractère de citation spécifique au backend. |
OBJECT_LEAF_NAME |
nvarchar(max) | Nom de l’objet non qualifié. |
TABLE_LOCATION |
nvarchar(max) | Chaîne d’emplacement de table valide qui peut être utilisée pour l’instruction CREATE EXTERNAL TABLE . Est NULL s'il n'est pas applicable. |
autorisations
Nécessite l'autorisation ALTER ANY EXTERNAL DATA SOURCE.
Notes
La fonctionnalité PolyBase doit être installée sur l'instance de SQL Server. Cette procédure a été introduite pour la première fois dans SQL Server 2019 (15.x) CU 5.
Cette procédure stockée prend en charge les connecteurs pour :
- SQL Server
- Oracle
- Teradata
- MongoDB
- Azure Cosmos DB
La procédure stockée ne prend pas en charge les sources de données ODBC génériques ou les connecteurs Hadoop.
La notion de vide ou de non vide est liée au comportement du pilote ODBC et de la fonction SQLTables. Non vide indique qu’un objet contient des tables, et non des lignes. Par exemple, un schéma vide ne contient aucune table dans SQL Server. Une base de données vide ne contient aucune table dans Teradata.
Les types d'objets sont déterminés par le pilote ODBC de la source de données externe. Chaque source de données externe détermine ce qui constitue une table. Il peut s'agir d'objets de base de données tels que des fonctions dans Teradata ou des synonymes dans Oracle. PolyBase ne peut pas se connecter à certains objets ODBC en tant que tables externes et n'aura donc pas de valeur dans la colonne TABLE_LOCATION. Malgré l'absence de valeurs dans TABLE_LOCATION, la présence d'un de ces objets ODBC peut rendre une base de données ou un schéma non vide.
Utilisez sp_data_source_objects et sp_data_source_table_columns pour découvrir des objets externes. Ces procédures stockées système retournent le schéma des tables qui sont disponibles pour être virtualisées. Utilisez sp_data_source_table_columns pour découvrir les schémas de tables externes représentés dans les types de données SQL Server.
Tables externes aux collections MongoDB qui contiennent des tableaux
Utilisez sp_data_source_objects pour détecter le schéma de collection (colonnes) pour les collections MongoDB qui contiennent des tableaux et créer manuellement la table externe. La procédure stockée sp_data_source_table_columns effectue également automatiquement l’aplatissement via le pilote ODBC PolyBase pour MongoDB.
Remarques spécifiques au type de source de données
Teradata : Les vues système Teradata n’utilisent pas la sécurité au niveau des lignes (RLS), et les utilisateurs peuvent donc voir l’existence de tables qu’ils ne peuvent pas interroger.
MongoDB : Certaines versions antérieures de MongoDB limitent la possibilité de répertorier toutes les bases de données aux utilisateurs de type administrateur. Les utilisateurs qui n'ont pas cette autorisation peuvent obtenir des erreurs d'authentification en essayant d'exécuter cette procédure avec un @object_root_name nul.
Oracle : Les synonymes Oracle ne sont pas pris en charge pour l’utilisation avec PolyBase.
Exemples
SQL Server
L'exemple suivant retourne toutes les bases de données, tous les schémas et toutes les tables/vues
DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = NULL;
DECLARE @max_search_depth AS INT = 3;
EXECUTE sp_data_source_objects
@data_source,
@object_root_name,
@max_search_depth;
| Object_Type | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
|---|---|---|---|
DATABASE |
"database" |
database |
NULL |
SCHEMA |
"database"."dbo" |
dbo |
NULL |
TABLE |
"database"."dbo"."customer" |
customer |
[database].[dbo].[customer] |
TABLE |
"database"."dbo"."item" |
item |
[database].[dbo].[item] |
TABLE |
"database"."dbo"."nation" |
nation |
[database].[dbo].[nation] |
L'exemple suivant retourne toutes les bases de données.
DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = NULL;
EXECUTE sp_data_source_objects
@data_source,
@object_root_name;
| Object_Type | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
|---|---|---|---|
DATABASE |
UserDatabase |
UserDatabase |
NULL |
DATABASE |
master |
master |
NULL |
DATABASE |
msdb |
msdb |
NULL |
DATABASE |
tempdb |
tempdb |
NULL |
DATABASE |
database |
database |
NULL |
L’exemple suivant retourne toutes les schémas figurant dans le schéma dbo.
DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = N'[database]';
EXECUTE sp_data_source_objects
@data_source,
@object_root_name;
| Object_Type | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
|---|---|---|---|
SCHEMA |
"database"."dbo" |
dbo |
NULL |
SCHEMA |
"database"."INFORMATION_SCHEMA" |
INFORMATION_SCHEMA |
NULL |
SCHEMA |
"database"."sys" |
sys |
NULL |
L’exemple suivant retourne toutes les tables figurant dans le schéma.
DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = N'[database].[dbo]';
EXECUTE sp_data_source_objects
@data_source,
@object_root_name;
| Object_Type | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
|---|---|---|---|
TABLE |
"database"."dbo"."customer" |
customer |
[database].[dbo].[customer] |
TABLE |
"database"."dbo"."item" |
item |
[database].[dbo].[item] |
TABLE |
"database"."dbo"."nation" |
nation |
[database].[dbo].[nation] |
TABLE |
"database"."dbo"."orders" |
orders |
[database].[dbo].[orders] |
TABLE |
"database"."dbo"."part" |
part |
[database].[dbo].[part] |
Oracle
L'exemple suivant retourne les schémas complets et les tables, fonctions, vues, etc.
DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = N'[OracleObjectRoot]';
DECLARE @max_search_depth AS INT = 2;
EXECUTE sp_data_source_objects
@data_source,
@object_root_name,
@max_search_depth;
| Object_Type | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
|---|---|---|---|
VIEW |
"SYS"."ALL_SQLSET_STATEMENTS" |
ALL_SQLSET_STATEMENTS |
[ORACLEOBJECTROOT].[SYS].[ALL_SQLSET_STATEMENTS] |
SYSTEM TABLE |
"SYS"."BOOTSTRAP$" |
BOOTSTRAP$ |
[ORACLEOBJECTROOT].[SYS].[BOOTSTRAP$] |
SYNONYM |
"PUBLIC"."ALL_ALL_TABLES" |
ALL_ALL_TABLES |
NULL |
SCHEMA |
"database" |
database |
NULL |
TABLE |
"database"."customer" |
customer |
[ORACLEOBJECTROOT].[database].[customer] |
Teradata
L'exemple suivant retourne toutes les bases de données et les tables, les fonctions, les vues, etc.
DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = NULL;
DECLARE @max_search_depth AS INT = 2;
EXECUTE sp_data_source_objects
@data_source,
@object_root_name,
@max_search_depth;
| Object_Type | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
|---|---|---|---|
FUNCTION |
"SYSLIB"."ExtractRoles" |
ExtractRoles |
NULL |
SYSTEM TABLE |
"DBC"."UDTCast" |
UDTCast |
[DBC].[UDTCast] |
TYPE |
"SYSUDTLIB"."XML" |
XML |
NULL |
DATABASE |
"database" |
database |
NULL |
TABLE |
"database"."customer" |
customer |
[database].[customer] |
MongoDB
L'exemple suivant retourne toutes les bases de données et les tables.
DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = NULL;
DECLARE @max_search_depth AS INT = 2;
EXECUTE sp_data_source_objects
@data_source,
@object_root_name,
@max_search_depth;
| Object_Type | OBJECT_NAME | OBJECT_LEAF_NAME | TABLE_LOCATION |
|---|---|---|---|
DATABASE |
"database" |
database |
NULL |
TABLE |
"database"."customer" |
customer |
[database].[customer] |
TABLE |
"database"."item" |
item |
[database].[item] |
TABLE |
"database"."nation" |
nation |
[database].[nation] |
TABLE |
"database"."orders" |
orders |
[database].[orders] |