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
ist sysname
.
[ @object_root_name = ] 'object_root_name'
Dieser Parameter ist der Stamm des Namens des Objekts, nach dem gesucht werden soll. @object_root_name
ist nvarchar(max)
, mit einem Standardwert von NULL
.
Dieser Aufruf gibt nur externe Objekte zurück, die mit dem Wertsatz für @object_root_name
.
Wenn eine ODBC-Datenquelle eine Verbindung mit einem relationalen Datenbankverwaltungssystem (RDBMS) herstellt, das dreiteilige Namen verwendet, @object_root_name
kann kein Teildatenbankname enthalten. In diesen Fällen sollte der Parameter @object_root_name
alle drei Teile enthalten, wobei der dritte Teil der zu durchsuchenden Objektname ist.
Achtung
Aufgrund von Unterschieden zwischen externen Datenplattformen geben einige Plattformen keine Ergebnisse zurück, wenn der Standardwert NULL
bereitgestellt wird. Einige behandeln NULL
das Fehlen eines Filters. Beispielsweise gibt Oracle RDMBS keine Ergebnisse zurück, wenn NULL
für @object_root_name
.
[ @max_search_depth = ] max_search_depth
Dieser Wert gibt die maximale Tiefe (in Teilen) an, die @object_root_name
wir durchsuchen möchten. @max_search_depth
ist ein int
Standardwert von 1.
Beispielsweise würde eine @max_search_depth
von 1, bei der @object_root_name
es sich um den Namen einer SQL Server-Datenbank handelt, Schemata zurückgeben, die in der Datenbank enthalten sind.
A @max_search_depth
of NULL
will return information about @object_root_name
if it exists and is non-empty, in the case of catalog or schema.
[ @search_options = ] 'search_options'
Der search_options
Parameter ist nvarchar(max) mit einem Standardwert von NULL
.
Dieser Parameter wird nicht verwendet, kann aber zukünftig implementiert werden.
Resultsets
Spaltenname | Datentyp | BESCHREIBUNG |
---|---|---|
Object_Type | nvarchar(200) | Der Typ des Objekts (Beispiel: TABLE oder DATABASE). |
OBJECT_NAME | nvarchar(max) | Der vollqualifizierte Name des Objekts. Mithilfe des back-end-spezifischen Anführungszeichens escapen. |
OBJECT_LEAF_NAME | nvarchar(max) | Der nicht qualifizierte Objektname. |
TABLE_LOCATION | nvarchar(max) | Eine gültige Tabellenspeicherortzeichenfolge, die für die CREATE EXTERNAL TABLE-Anweisung verwendet werden kann. NULL Wird sein, wenn es nicht zutreffend ist. |
Berechtigungen
Erfordert eine ALTER ANY EXTERNAL DATA SOURCE-Berechtigung.
Bemerkungen
Die SQL Server-Instanz muss das PolyBase-Feature installiert haben. Dieses Verfahren wurde zuerst in SQL Server 2019 CU5 eingeführt.
Diese gespeicherte Prozedur unterstützt Connectors für:
- SQL Server
- Oracle
- Teradata
- MongoDB
- Cosmos DB
Die gespeicherte Prozedur unterstützt keine generische ODBC-Datenquelle oder Hadoop-Connectors.
Der Begriff "leer" oder "nicht leer" bezieht sich auf das Verhalten des ODBC-Treibers und der SQLTables
Funktion. Nicht leer gibt an, dass ein Objekt Tabellen enthält, nicht Zeilen. Ein leeres Schema enthält beispielsweise 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. Dies kann Datenbankobjekte wie Funktionen in Teradata oder Synonyme in Oracle enthalten. PolyBase kann keine Verbindung zu einigen ODBC-Objekten als externe Tabellen herstellen und hat daher keinen Wert in der TABLE_LOCATION
Spalte. Trotz fehlender Werte in TABLE_LOCATION
, kann das Vorhandensein eines dieser ODBC-Objekte eine Datenbank oder ein Schema nicht leer machen.
Verwenden sp_data_source_objects
und sp_data_source_table_columns , um externe Objekte zu ermitteln. Diese systemgespeicherten Prozeduren geben das Schema von Tabellen zurück, die für die Virtualisierung verfügbar sind. Azure Data Studio verwendet diese beiden gespeicherten Prozeduren, um die Datenvirtualisierung zu unterstützen. Verwenden Sie sp_data_source_table_columns , um externe Tabellenschemas zu ermitteln, die in SQL Server-Datentypen dargestellt sind.
Externe Tabellen zu MongoDB-Auflistungen, die Arrays enthalten
Um externe Tabellen für MongoDB-Auflistungen zu erstellen, die Arrays enthalten, sollten Sie die Data Virtualization-Erweiterung für Azure Data Studio verwenden, um eine CREATE EXTERNAL TABLE-Anweisung basierend auf dem Schema zu erstellen, das vom PolyBase ODBC-Treiber für MongoDB erkannt wurde. Die Abschläfungsaktionen werden automatisch vom Treiber ausgeführt. Alternativ können Sie sp_data_source_objects (Transact-SQL) verwenden, um das Sammlungsschema (Spalten) zu erkennen und die externe Tabelle manuell zu erstellen. Die sp_data_source_table_columns
gespeicherte Prozedur führt auch automatisch die Abschläfung über den PolyBase ODBC-Treiber 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 Schemaschema abzufragen.
Spezifische Hinweise zum Datenquellentyp
Teradata
Teradata-Systemansichten verwenden keine Sicherheitssicherheit 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 ohne diese Berechtigung erhalten möglicherweise Authentifizierungsfehler, die versuchen, diese Prozedur mit einem NULL-Wert
@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/Ansichten 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 | "datenbank". dbo" | dbo | NULL |
TABLE | "datenbank". dbo"." Kunde" | Kunde | [Datenbank]. [dbo]. [Kunde] |
TABLE | "Datenbank". dbo"." Element" | item | [Datenbank]. [dbo]. [Element] |
TABLE | "Datenbank". dbo"." Nation" | Nation | [Datenbank]. [dbo]. [Nation] |
Im folgenden Beispiel werden alle Datenbanken zurückgegeben.
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 |
Im folgenden Beispiel werden alle Schemata in einer Datenbank zurückgegeben.
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 | "Datenbank". dbo" | dbo | NULL |
SCHEMA | "Datenbank". INFORMATION_SCHEMA" | INFORMATION_SCHEMA | NULL |
SCHEMA | "Datenbank". sys" | sys | NULL |
Im folgenden Beispiel werden alle Tabellen im Schema zurückgegeben.
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 | "Datenbank". dbo"." Kunde" | Kunde | [Datenbank]. [dbo]. [Kunde] |
TABLE | "Datenbank". dbo"." Element" | item | [Datenbank]. [dbo]. [Element] |
TABLE | "Datenbank". dbo"." Nation" | Nation | [Datenbank]. [dbo]. [Nation] |
TABLE | "Datenbank". dbo"." Bestellungen" | Aufträge | [Datenbank]. [dbo]. [Bestellungen] |
TABLE | "Datenbank". dbo"." Teil" | -Komponente | [Datenbank]. [dbo]. [teil] |
Oracle
Im folgenden Beispiel wird die vollständige Schemata und Tabellen, Funktionen, Ansichten und usw. zurückgegeben.
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 | "ÖFFENTLICH". ALL_ALL_TABLES" | ALL_ALL_TABLES | NULL |
SCHEMA | "database" | database | NULL |
TABLE | "Datenbank". Kunde" | Kunde | [ORACLEOBJECTROOT]. [Datenbank]. [Kunde] |
Teradata
Im folgenden Beispiel werden alle Datenbanken und Tabellen, Funktionen, Ansichten und usw. zurückgegeben.
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 | "datenbank". Kunde" | Kunde | [Datenbank]. [Kunde] |
MongoDB
Im folgenden Beispiel werden alle Datenbanken und Tabellen zurückgegeben.
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 | "datenbank". Kunde" | Kunde | [Datenbank]. [Kunde] |
TABLE | "datenbank". element" | item | [Datenbank]. [Element] |
TABLE | "datenbank". Nation" | Nation | [Datenbank]. [Nation] |
TABLE | "datenbank". Bestellungen" | Aufträge | [Datenbank]. [Bestellungen] |