Partager via


sys.sp_data_source_objects (Transact-SQL)

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]