sp_data_source_objects (Transact-SQL)

S’applique à : SQL Server 2019 (15.x)

Retourne la liste des objets de table 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 duquel obtenir les métadonnées. @data_source est sysname.

[ @object_root_name = ] 'object_root_name'

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

Cet appel retourne uniquement des 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 de nom de base de données partielle. Dans ces cas, le paramètre @object_root_name doit contenir les trois parties, la troisième partie é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 est NULL fournie. Certains traitent NULL comme l’absence d’un filtre. Par exemple, Oracle RD Mo S ne retourne pas de résultats s’il 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 nous souhaitons rechercher. @max_search_depth est un int avec une valeur par défaut .1

Par exemple, une @max_search_depth de 1, avec un @object_root_name qui est le nom d’une base de données SQL Server, retourne des schémas contenus dans la base de données.

Une @max_search_depth de retour d’informations NULL 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 search_options paramètre est nvarchar(max) avec la valeur par défaut NULL.

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

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. Échappement à l’aide d’un caractère de guillemet spécifique au back-end.
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. S’il NULL n’est pas applicable.

Autorisations

Exige l’autorisation ALTER ANY EXTERNAL DATA SOURCE.

Notes

L’instance SQL Server doit avoir installé la fonctionnalité PolyBase . 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 la source de données ODBC générique ou les connecteurs Hadoop.

La notion de vide ou non vide concerne le comportement du pilote ODBC et de la SQLTables fonction. 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 est qualifié de table. Cela peut inclure des 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 TABLE_LOCATION colonne. Malgré l’absence de valeurs dans TABLE_LOCATION, la présence de l’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 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 table 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 Data Virtualization pour Azure Data Studio pour produire une instruction CREATE EXTERNAL TABLE, en fonction du schéma détecté par le pilote ODBC PolyBase pour MongoDB. Les actions d’aplatissement sont automatiquement effectuées par le pilote. Vous pouvez également utiliser sp_data_source_objects (Transact-SQL) 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 Teradata n’utilisent pas de 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 sans cette autorisation peuvent obtenir des erreurs d’authentification qui tentent d’exécuter cette procédure avec une @object_root_name Null.

  • 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, schémas et 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 tous les schémas dans une base de données

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 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 tables, fonctions, vues et 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 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]