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