sp_data_source_objects (Transact-SQL)
Si applica a: SQL Server 2019 (15.x)
restituisce un elenco di oggetti tabella disponibili per la virtualizzazione.
Sintassi
Convenzioni relative alla sintassi 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' ]
[ ; ]
Argomenti
[ @data_source = ] 'data_source'
Nome dell'origine dati esterna da cui ottenere i metadati. @data_source è sysname
.
[ @object_root_name = ] 'object_root_name'
Questo parametro è la radice del nome degli oggetti da cercare. @object_root_name è nvarchar(max)
, con il impostazione predefinita NULL
.
Questa chiamata restituisce solo oggetti esterni che iniziano con il valore impostato per @object_root_name.
Se un'origine dati ODBC si connette a un sistema di gestione di database relazionale (RDBMS) che usa nomi in tre parti, @object_root_name non può contenere un nome di database parziale. In questi casi, il parametro @object_root_name deve contenere tutte e tre le parti, con la terza parte che rappresenta il nome dell'oggetto da cercare.
Attenzione
A causa delle differenze tra piattaforme dati esterne, alcune piattaforme non restituiscono risultati se viene fornito il valore predefinito di NULL
. Alcuni considerano NULL
la mancanza di un filtro. Ad esempio, Oracle RDMBS non restituirà i risultati se NULL
viene fornito per @object_root_name.
[ @max_search_depth = ] max_search_depth
Questo valore specifica la profondità massima (in parti) oltre il @object_root_name che si desidera cercare. @max_search_depth è un valore int con impostazione predefinita 1
.
Ad esempio, un @max_search_depth di 1, con un @object_root_name che corrisponde al nome di un database di SQL Server, restituirà schemata contenuto all'interno del database.
Un @max_search_depth di NULL
restituisce informazioni su @object_root_name se è esistente e non è vuoto, nel caso di catalogo o schema.
[ @search_options = ] 'search_options'
Il parametro search_options
è nvarchar(max) con una impostazione predefinita di NULL
.
Questo parametro non viene usato ma potrà essere implementato in futuro.
Set di risultati
Nome colonna | Tipo di dati | Descrizione |
---|---|---|
OBJECT_TYPE |
nvarchar(200) | Tipo dell'oggetto (esempio: TABLE o DATABASE). |
OBJECT_NAME |
nvarchar(max) | Nome completo dell'oggetto . Carattere di escape con virgolette specifiche del back-end. |
OBJECT_LEAF_NAME |
nvarchar(max) | Nome dell'oggetto non qualificato. |
TABLE_LOCATION |
nvarchar(max) | Una stringa di posizione della tabella valida che può essere utilizzata per l'istruzione CREARE TABELLA ESTERNA. È NULL se non è applicabile. |
Autorizzazioni
È necessaria l'autorizzazione ALTER ANY EXTERNAL DATA SOURCE.
Osservazioni:
L'istanza di SQL Server deve avere la funzionalità PolyBase installata. Questa procedura è stata introdotta per la prima volta in SQL Server 2019 CU5.
Questa stored procedure supporta i connettori per:
- SQL Server
- Oracle
- Teradata
- MongoDB
- Azure Cosmos DB
La stored procedure non supporta connettori di origine dati ODBC o hadoop.
Il concetto di vuoto e non vuoto è correlato al comportamento del driver ODBC e della funzione SQLTables. Non vuoto indica che un oggetto contiene tabelle, non righe. Ad esempio, uno schema vuoto non contiene tabelle in SQL Server. Un database vuoto non contiene tabelle all'interno di Teradata.
I tipi di oggetto sono determinati dal driver ODBC dell'origine dati esterna. Ogni origine dati esterna determina cosa qualifica come tabella. Può includere oggetti database come funzioni in Teradata o sinonimi in Oracle. PolyBase non è in grado di connettersi ad alcuni oggetti ODBC come tabelle esterne e pertanto non avrà un valore nella colonna TABLE_LOCATION
. Nonostante l'assenza di valori in TABLE_LOCATION
, la presenza di uno di questi oggetti ODBC potrebbe rendere un database o uno schema non vuoto.
Usare sp_data_source_objects
e sp_data_source_table_columns per individuare oggetti esterni. Queste stored procedure di sistema restituiscono lo schema delle tabelle disponibili per la virtualizzazione. Azure Data Studio usa queste due stored procedure per supportare la virtualizzazione dei dati. Usare sp_data_source_table_columns per individuare gli schemi di tabella esterni rappresentati nei tipi di dati di SQL Server.
Tabelle esterne per raccolte MongoDB che contengono matrici
Per creare tabelle esterne nelle raccolte MongoDB contenenti matrici, è necessario usare l'estensione di virtualizzazione dei dati per Azure Data Studio per produrre un'istruzione CREATE EXTERNAL TABLE basata sullo schema rilevato dal driver ODBC PolyBase per MongoDB. Le prestazioni di appiattimento vengono eseguite automaticamente dal driver. In alternativa, è possibile usare sp_data_source_objects per rilevare lo schema della raccolta (colonne) e creare manualmente la tabella esterna. La stored procedure sp_data_source_table_columns
esegue inoltre l'appiattimento automatico tramite il driver ODBC di PolyBase per il driver MongoDB. L'estensione di virtualizzazione dei dati per Azure Data Studio e sp_data_source_table_columns
usano le stesse stored procedure interne per eseguire query sullo schema esterno.
Osservazioni specifiche relative al tipo di origine dati
Teradata
Le visualizzazioni di sistema Teradata non usano la sicurezza a livello di riga e quindi gli utenti possono visualizzare l'esistenza di tabelle che non possono eseguire query.
MongoDB
Alcune versioni precedenti di MongoDB applicano restrizioni alla possibilità di elencare tutti i database agli utenti nel ruolo di amministratori. Gli utenti senza questa autorizzazione potrebbero ricevere errori di autenticazione durante il tentativo di eseguire questa procedura con un null @object_root_name.
Oracle
I sinonimi di Oracle non possono essere usati con PolyBase.
Esempi
SQL Server
Nell'esempio seguente vengono restituiti tutti i database, schemata e tabelle/visualizzazioni
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] |
Nell'esempio seguente vengono restituiti tutti i database.
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 |
Nell'esempio seguente vengono restituiti tutti gli schemi in un database.
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 |
Nell'esempio seguente vengono restituite tutte le tabelle nello schema.
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
Nell'esempio seguente vengono restituiti lo schema completo e le tabelle, le funzioni, le visualizzazioni e così via.
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
Nell'esempio seguente vengono restituiti tutti i database, le funzioni, visualizzazioni, ecc.
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] |
MongoDB
Nell'esempio seguente vengono restituiti tutti i database e le tabelle.
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] |