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.

Syntaxe

Conventions de la syntaxe Transact-SQL

sp_data_source_objects
        [ @data_source = ] 'data_source'
    [ , [ @object_root_name = ] 'object_root_name' ]
    [ , [ @max_search_depth = ] max_search_depth ]
    [ , [ @search_options = ] 'search_options' ]
[ ; ]

Arguments

[ @data_source = ] 'data_source'

Nom de la source de données externe à partir de laquelle les métadonnées doivent être obtenues. @data_source est sysname.

[ @object_root_name = ] 'object_root_name'

Ce paramètre est la racine du nom du ou des objets à rechercher. @object_root_name est nvarchar(max), avec la valeur NULL par défaut .

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 indique la profondeur maximale (en parties) au-delà du paramètre @object_root_name à rechercher. @max_search_depth est un int avec une valeur 1 par défaut .

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 = ] 'search_options'

Le paramètre search_options est nvarchar(max) avec une valeur par défaut de NULL.

Ce paramètre n'est pas utilisé, mais pourrait être implémenté à l'avenir.

Jeu de résultats

Nom de la colonne Type de données Description
OBJECT_TYPE nvarchar(200) Type d'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

Exige 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 CU5.

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. Azure Data Studio utilise ces deux procédures stockées pour prendre en charge la virtualisation des donné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

Pour créer des tables externes dans des collections MongoDB qui contiennent des tableaux, vous devez utiliser l’extension de virtualisation des données pour Azure Data Studio afin de produire une instruction CREATE EXTERNAL TABLE basée sur le schéma détecté par le pilote ODBC PolyBase pour MongoDB. Les actions d’aplatissement sont effectuées automatiquement par le pilote. Vous pouvez également utiliser sp_data_source_objects pour détecter le schéma de collection (colonnes) 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. L’extension de virtualisation des données pour Azure Data Studio et sp_data_source_table_columns utilise les mêmes procédures stockées internes pour interroger le schéma externe.

Remarques spécifiques au type de source de données

  • Teradata

    Les vues système de 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 lister 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

    L’utilisation de synonymes Oracle avec PolyBase n’est pas prise en charge.

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 SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = NULL;
DECLARE @max_search_depth INT = 3;

EXEC 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 SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = NULL;

EXEC 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 SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = N'[database]';

EXEC 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 SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = N'[database].[dbo]';

EXEC 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 SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = N'[OracleObjectRoot]';
DECLARE @max_search_depth INT = 2;

EXEC 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 SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = NULL;
DECLARE @max_search_depth INT = 2;

EXEC 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]

Mongo DB

L'exemple suivant retourne toutes les bases de données et les tables.

DECLARE @data_source SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name NVARCHAR(MAX) = NULL;
DECLARE @max_search_depth INT = 2;

EXEC 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]