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(n), 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 für @object_root_name festgelegten Wert beginnen.

Wenn eine ODBC-Datenquelle eine Verbindung mit einem relationalen Datenbankverwaltungssystem (RELATIONAL Database Management System, 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 durchsuchende 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 bereitgestellt wird.

[ @max_search_depth = ] max_search_depth

Dieser Wert gibt die maximale Tiefe (in Teilen) über den @object_root_name an, den wir durchsuchen 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.

Ein @max_search_depth gibt NULL Informationen zu @object_root_name zurück, falls vorhanden und nicht leer ist, im Fall von Katalog oder Schema.

[ @search_options = ] 'search_options'

Der search_options Parameter ist nvarchar(max) mit einem Standardwert von NULL.

Dieser Parameter wird nicht verwendet, kann aber in Zukunft implementiert werden.

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. Escapezeichen 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 dies nicht zutreffend.

Berechtigungen

Erfordert eine ALTER ANY EXTERNAL DATA SOURCE-Berechtigung.

Hinweise

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
  • Azure Cosmos DB

Die gespeicherte Prozedur unterstützt keine generische ODBC-Datenquelle oder Hadoop-Connectors.

Der Begriff "leer" und "nicht leer" bezieht sich auf das Verhalten des ODBC-Treibers und der SQLTables Funktion. 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 TABLE_LOCATION Spalte auf. Trotz fehlender Werte TABLE_LOCATIONkann 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 vom System gespeicherten Prozeduren geben das Schema von Tabellen zurück, die zur Virtualisierung verfügbar sind. 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-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 Flachungsaktionen 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 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 ohne diese Berechtigung erhalten möglicherweise Authentifizierungsfehler, die 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/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 "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]

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 "database"."dbo" dbo NULL
SCHEMA "database"."INFORMATION_SCHEMA" INFORMATION_SCHEMA NULL
SCHEMA "database"."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 "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

Im folgenden Beispiel werden die vollständigen 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 "PUBLIC"."ALL_ALL_TABLES" ALL_ALL_TABLES NULL
SCHEMA "database" database NULL
TABLE "database"."customer" customer [ORACLEOBJECTROOT].[database].[customer]

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 "database"."customer" customer [database].[customer]

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 "database"."customer" customer [database].[customer]
TABLE "database"."item" item [database].[item]
TABLE "database"."nation" nation [database].[nation]
TABLE "database"."orders" orders [database].[orders]