sp_data_source_objects (Transact-SQL)
Gilt für: SQL Server 2019 (15.x)
Gibt eine Liste von Tabellenobjekten zurück, die virtualisiert werden können.
Syntax
Transact-SQL-Syntaxkonventionen
sp_data_source_objects
[ @data_source = ] 'data_source'
[ , [ @object_root_name = ] 'object_root_name' ]
[ , [ @max_search_depth = ] max_search_depth ]
[ , [ @search_options = ] 'search_options' ]
[ ; ]
Argumente
[ @data_source = ] 'data_source'
Der Name der externen Datenquelle, aus der die Metadaten abgerufen werden sollen. @data_source is sysname
.
[ @object_root_name = ] 'object_root_name'
Dieser Parameter ist der Stamm des Namens des oder der Objekte, nach denen gesucht werden soll. @object_root_name ist nvarchar(max)
, mit einem Standard von NULL
.
Dieser Aufruf gibt nur externe Objekte zurück, die mit dem für @object_root_name festgelegten Wert beginnen.
Wenn eine ODBC-Datenquelle eine Verbindung mit einem relationalen Datenbankverwaltungssystem (RDBMS) herstellt, das dreiteilige Namen verwendet, kann @object_root_name keinen teilweisen Datenbanknamen enthalten. In diesen Fällen sollte der Parameter @object_root_name alle drei Teile enthalten, wobei der dritte Teil der zu suchende Objektname ist.
Achtung
Aufgrund von Unterschieden zwischen externen Datenplattformen geben einige Plattformen keine Ergebnisse zurück, wenn der Standardwert NULL
angegeben wird. Einige behandeln NULL
als das Fehlen eines Filters. Beispielsweise gibt Oracle RDMBS keine Ergebnisse zurück, wenn NULL
für @object_root_name bereitgestellt wird.
[ @max_search_depth = ] max_search_depth
Dieser Wert gibt die maximale Tiefe (in Teilen) über den @object_root_name an, den wir suchen möchten. @max_search_depth ist ein Int mit einem Standardwert von 1
.
Beispielsweise würde ein @max_search_depth von 1 mit einem @object_root_name, der der Name einer SQL Server-Datenbank ist, Schemata zurückgeben, die in der Datenbank enthalten sind.
Eine @max_search_depth von NULL
gibt im Falle von Katalog oder Schema Informationen über @object_root_name zurück, wenn er existiert und nicht leer ist.
[ @search_options = ] 'search_options'
Der Parameter search_options
ist nvarchar(max) mit einem Standardwert von NULL
.
Dieser Parameter wird nicht verwendet, wird aber möglicherweise in Zukunft implementiert.
Resultset
Spaltenname | Datentyp | Beschreibung |
---|---|---|
OBJECT_TYPE |
nvarchar(200) | Der Typ des Objekts (Beispiel: TABLE oder DATABASE). |
OBJECT_NAME |
nvarchar(max) | Der vollqualifizierte Typname des -Objekts. Escape mit Back-End-spezifischem Anführungszeichen. |
OBJECT_LEAF_NAME |
nvarchar(max) | Der nicht qualifizierte Objektname. |
TABLE_LOCATION |
nvarchar(max) | Eine gültige Tabellenpositionszeichenfolge, die für die CREATE EXTERNAL TABLE-Anweisung verwendet werden kann. Ist NULL wenn nicht zutreffend. |
Berechtigungen
Erfordert eine ALTER ANY EXTERNAL DATA SOURCE-Berechtigung.
Hinweise
Auf der SQL Server-Instanz muss die PolyBase-Funktion installiert sein. Dieses Verfahren wurde zuerst in SQL Server 2019 CU5 eingeführt.
Diese gespeicherte Prozedur unterstützt Connectors für:
- SQL Server
- Oracle
- Teradata
- MongoDB
- Azure Cosmos DB
Die gespeicherte Prozedur unterstützt keine generische ODBC-Datenquelle oder Hadoop-Connectors.
Der Begriff „leer“ (statt „nicht leer“) bezieht sich auf das Verhalten des ODBC-Treibers und der Funktion SQLTables. Nicht leer gibt an, dass ein Objekt Tabellen und keine Zeilen enthält. Beispielsweise enthält ein leeres Schema keine Tabellen in SQL Server. Eine leere Datenbank enthält keine Tabellen innerhalb von Teradata.
Objekttypen werden vom ODBC-Treiber der externen Datenquelle bestimmt. Jede externe Datenquelle bestimmt, was als Tabelle qualifiziert wird. Dazu können Datenbankobjekte wie Funktionen in Teradata oder Synonyme in Oracle gehören. PolyBase kann keine Verbindung mit einigen ODBC-Objekten als externe Tabellen herstellen und weist daher keinen Wert in der Spalte TABLE_LOCATION
auf. Trotz des Fehlens von Werten in TABLE_LOCATION
kann das Vorhandensein eines dieser ODBC-Objekte u. U. dazu führen, dass eine Datenbank oder ein Schema nicht leer ist.
Verwenden Sie sp_data_source_objects
und sp_data_source_table_columns, um externe Objekte zu ermitteln. Diese vom System gespeicherten Prozeduren geben das Schema von Tabellen zurück, die zur Virtualisierung verfügbar stehen. Azure Data Studio verwendet diese beiden gespeicherten Prozeduren zur Unterstützung der Datenvirtualisierung. Verwenden Sie sp_data_source_table_columns, um externe Tabellenschemas zu ermitteln, die in SQL Server-Datentypen dargestellt sind.
Externe Tabellen zu MongoDB-Sammlungen, die Arrays enthalten
Um externe Tabellen für MongoDB-Sammlungen zu erstellen, die Arrays enthalten, sollten Sie die Datenvirtualisierungserweiterung für Azure Data Studio verwenden, um eine CREATE EXTERNAL TABLE-Anweisung basierend auf dem Schema zu erstellen, das vom ODBC-Treiber in PolyBase für MongoDB erkannt wurde. Die Aktionen zur Vereinfachung werden automatisch vom Treiber ausgeführt. Alternativ können Sie sp_data_source_objects verwenden, um das Sammlungsschema (Spalten) zu erkennen und die externe Tabelle manuell zu erstellen. Die gespeicherte Prozedur sp_data_source_table_columns
führt auch automatisch die Vereinfachung über den ODBC-Treiber in PolyBase für MongoDB-Treiber aus. Die Datenvirtualisierungserweiterung für Azure Data Studio und sp_data_source_table_columns
verwenden dieselben internen gespeicherten Prozeduren, um das externe Schema abzufragen.
Spezifische Hinweise zum Datenquellentyp
Teradata
Teradata-Systemansichten verwenden keine Sicherheit auf Zeilenebene (RLS), sodass Benutzer das Vorhandensein von Tabellen sehen können, die sie nicht abfragen können.
MongoDB
Einige frühere Versionen von MongoDB beschränken die Möglichkeit, alle Datenbanken auf administratorähnliche Benutzer auflisten zu können. Benutzer*innen ohne diese Berechtigung erhalten möglicherweise Authentifizierungsfehler, wenn sie versuchen, diese Prozedur mit einem NULL-@object_root_name auszuführen.
Oracle
Oracle-Synonyme werden für die Verwendung mit PolyBase nicht unterstützt.
Beispiele
SQL Server
Im folgenden Beispiel werden alle Datenbanken, Schemata und Tabellen/Anzeigen zurückgegeben
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] |
Das folgende Beispiel gibt alle Datenbanken zurück
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 |
Das folgende Beispiel gibt alle Schemata in einer Datenbank zurück
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 |
Das folgende Beispiel gibt alle Tabellen im Schema zurück
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
Das folgende Beispiel gibt die vollständigen Schemata und Tabellen, Funktionen, Anzeigen usw. zurück.
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
Das folgende Beispiel gibt alle Datenbanken und Tabellen, Funktionen, Anzeigen usw. zurück.
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
Das folgende Beispiel gibt alle Datenbanken und Tabellen zurück.
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] |