Share via


sys.sp_data_source_objects (Transact-SQL)

Van toepassing op: SQL Server 2019 (15.x)

Retourneert een lijst met tabelobjecten die beschikbaar zijn om te worden gevirtualiseerd.

Transact-SQL syntaxis-conventies

Syntaxis

sys.sp_data_source_objects
    [ @data_source = ] N'data_source'
    [ , [ @object_root_name = ] N'object_root_name' ]
    [ , [ @max_search_depth = ] max_search_depth ]
    [ , [ @search_options = ] N'search_options' ]
[ ; ]

Arguments

[ @data_source = ] N'data_source'

De naam van de externe gegevensbron waaruit de metagegevens moeten worden opgehaald. @data_source is sysname, zonder standaardwaarde.

[ @object_root_name = ] N'object_root_name'

De hoofdmap van de naam van het object of de objecten waarnaar moet worden gezocht. @object_root_name is nvarchar(max), met een standaardwaarde van NULL.

Met deze aanroep worden alleen externe objecten geretourneerd die beginnen met de waarde die is ingesteld voor @object_root_name.

Als een ODBC-gegevensbron verbinding maakt met een relationeel databasebeheersysteem (RDBMS) dat gebruikmaakt van driedelige namen, kan @object_root_name geen gedeeltelijke databasenaam bevatten. In deze gevallen moet de parameter @object_root_name alle drie de onderdelen bevatten, waarbij het derde deel de objectnaam is om te zoeken.

Waarschuwing

Vanwege verschillen tussen externe gegevensplatformen retourneren sommige platforms geen resultaten als de standaardwaarde is NULL opgegeven. Sommigen behandelen NULL het ontbreken van een filter. Oracle RDMBS retourneert bijvoorbeeld geen resultaten als NULL deze is opgegeven voor @object_root_name.

[ @max_search_depth = ] max_search_depth

Met deze waarde geeft u de maximale diepte (in delen) achter de @object_root_name die u wilt doorzoeken. @max_search_depth is int, met een standaardwaarde van 1.

Een @max_search_depth van 1, met een @object_root_name die de naam is van een SQL Server-database, retourneert bijvoorbeeld schemata in de database.

Een @max_search_depth retourneert NULL informatie over @object_root_name als deze bestaat en niet leeg is, in het geval van catalogus of schema.

[ @search_options = ] N'search_options'

Alleen ter informatie geïdentificeerd. Wordt niet ondersteund. Toekomstige compatibiliteit is niet gegarandeerd.

Resultaatset

Kolomnaam Gegevenstype Description
OBJECT_TYPE nvarchar(200) Het type object (voorbeeld: TABLE of DATABASE).
OBJECT_NAME nvarchar(max) De volledig gekwalificeerde naam van het object. Ontsnapt met een back-endspecifiek aanhalingsteken.
OBJECT_LEAF_NAME nvarchar(max) De niet-gekwalificeerde objectnaam.
TABLE_LOCATION nvarchar(max) Een geldige tabellocatietekenreeks die kan worden gebruikt voor de CREATE EXTERNAL TABLE instructie. Is NULL het niet van toepassing.

Permissions

Hiervoor is toestemming vereist ALTER ANY EXTERNAL DATA SOURCE .

Opmerkingen

Op het SQL Server-exemplaar moet de PolyBase-functie zijn geïnstalleerd. Deze procedure is voor het eerst geïntroduceerd in SQL Server 2019 (15.x) CU 5.

Deze opgeslagen procedure ondersteunt connectors voor:

  • SQL Server
  • Oracle
  • Teradata
  • MongoDB
  • Azure Cosmos DB

De opgeslagen procedure biedt geen ondersteuning voor algemene ODBC-gegevensbron of Hadoop-connectors.

Het begrip leeg versus niet-leeg heeft betrekking op het gedrag van het ODBC-stuurprogramma en de functie SQLTables . Niet-leeg geeft aan dat een object tabellen bevat, niet rijen. Een leeg schema bevat bijvoorbeeld geen tabellen in SQL Server. Een lege database bevat geen tabellen in Teradata.

Objecttypen worden bepaald door het ODBC-stuurprogramma van de externe gegevensbron. Elke externe gegevensbron bepaalt wat in aanmerking komt als een tabel. Dit kunnen databaseobjecten zijn zoals functies in Teradata of synoniemen in Oracle. PolyBase kan geen verbinding maken met sommige ODBC-objecten als externe tabellen en heeft daarom geen waarde in de TABLE_LOCATION kolom. Ondanks het ontbreken van waarden, TABLE_LOCATIONkan de aanwezigheid van een van deze ODBC-objecten een database of schema niet leeg maken.

Gebruik sp_data_source_objects en sp_data_source_table_columns om externe objecten te detecteren. Deze opgeslagen systeemprocedures retourneren het schema van tabellen die beschikbaar zijn om te worden gevirtualiseerd. Gebruik sp_data_source_table_columns om externe tabelschema's te detecteren die worden weergegeven in SQL Server-gegevenstypen.

Externe tabellen voor MongoDB-verzamelingen die matrices bevatten

Gebruik sp_data_source_objects om het verzamelingsschema (kolommen) te detecteren voor MongoDB-verzamelingen die matrices bevatten en de externe tabel handmatig te maken. De sp_data_source_table_columns opgeslagen procedure voert ook automatisch het platmaken uit via het PolyBase ODBC-stuurprogramma voor mongoDB-stuurprogramma.

Specifieke opmerkingen voor gegevensbrontype

  • Teradata: Teradata-systeemweergaven maken geen gebruik van beveiliging op rijniveau (RLS), zodat gebruikers het bestaan van tabellen kunnen zien waarop ze geen query's kunnen uitvoeren.

  • MongoDB: Sommige eerdere versies van MongoDB beperken de mogelijkheid om alle databases weer te geven aan beheerdersachtige gebruikers. Gebruikers zonder deze machtiging krijgen mogelijk verificatiefouten bij het uitvoeren van deze procedure met een null -@object_root_name.

  • Oracle: Oracle-synoniemen worden niet ondersteund voor gebruik met PolyBase.

Voorbeelden

SQL Server

In het volgende voorbeeld worden alle databases, schemata en tabellen/weergaven geretourneerd

DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = NULL;
DECLARE @max_search_depth AS INT = 3;

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

In het volgende voorbeeld worden alle databases geretourneerd

DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = NULL;

EXECUTE 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

In het volgende voorbeeld worden alle schemata's in een database geretourneerd

DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = N'[database]';

EXECUTE 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

In het volgende voorbeeld worden alle tabellen in het schema geretourneerd

DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = N'[database].[dbo]';

EXECUTE 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

In het volgende voorbeeld worden de volledige schemata en tabellen, functies, weergaven en enzovoort geretourneerd.

DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = N'[OracleObjectRoot]';
DECLARE @max_search_depth AS INT = 2;

EXECUTE 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

In het volgende voorbeeld worden alle databases en tabellen, functies, weergaven en enzovoort geretourneerd.

DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = NULL;
DECLARE @max_search_depth AS INT = 2;

EXECUTE 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

In het volgende voorbeeld worden alle databases en tabellen geretourneerd.

DECLARE @data_source AS SYSNAME = N'ExternalDataSourceName';
DECLARE @object_root_name AS NVARCHAR (MAX) = NULL;
DECLARE @max_search_depth AS INT = 2;

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