sp_data_source_objects (Transact-SQL)

适用于:SQL Server 2019 (15.x)

返回可用于虚拟化的表对象的列表。

语法

主题链接图标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' ]
[ ; ]

参数

[ @data_source = ] 'data_source'

要从中获取元数据的外部数据源的名称。 @data_sourcesysname

[ @object_root_name = ] 'object_root_name'

此参数是要搜索的对象 () 的名称的根。 @object_root_name is nvarchar(max), with a default of NULL.

此调用仅返回以设置为 @object_root_name 的值开头的外部对象。

如果 ODBC 数据源连接到关系数据库管理系统, (使用三部分名称的 RDBMS) , @object_root_name 则不能包含部分数据库名称。 在这些情况下,参数 @object_root_name 应包含所有三个部分,第三部分是要搜索的对象名称。

注意

由于外部数据平台之间的差异,如果提供了默认值 NULL ,某些平台不会返回任何结果。 有些则被视为 NULL 缺少筛选器。 例如,如果 NULL@object_root_nameOracle RDMBS 提供,则不会返回结果。

[ @max_search_depth = ] max_search_depth

此值指定) 要搜索的部分的最大 @object_root_name 深度 (。 @max_search_depth是默认值为 1 的 。int

例如,@max_search_depth如果值为 1,其@object_root_name名称为 SQL Server 数据库,则返回数据库中包含的 schemata。

在目录或架构中,其中NULL@max_search_depth返回有关@object_root_name它是否存在且非空的信息。

[ @search_options = ] 'search_options'

参数 search_options 为 nvarchar (默认值 NULL为 max) 。

此参数未使用,但将来可能实现。

结果集

列名 数据类型 说明
Object_Type nvarchar(200) 对象的类型 (示例:TABLE 或 DATABASE) 。
OBJECT_NAME nvarchar(max) 对象的完全限定名称。 使用特定于后端的引号字符进行转义。
OBJECT_LEAF_NAME nvarchar(max) 未限定的对象名称。
TABLE_LOCATION nvarchar(max) 可用于 CREATE EXTERNAL TABLE 语句的有效表位置字符串。 如果是 NULL 不适用的。

权限

需要 ALTER ANY EXTERNAL DATA SOURCE 权限。

备注

SQL Server实例必须安装 PolyBase 功能。 此过程首次在 2019 CU5 SQL Server引入。

此存储过程支持以下连接器:

  • SQL Server
  • Oracle
  • Teradata
  • MongoDB
  • CosmosDB

存储过程不支持泛型 ODBC 数据源或 Hadoop 连接器。

空与非空的概念与 ODBC 驱动程序和 SQLTables 函数的行为相关。 非空表示对象包含表,而不是行。 例如,空架构不包含SQL Server中的表。 空数据库包含 Teradata 中没有表。

对象类型由外部数据源的 ODBC 驱动程序决定。 每个外部数据源确定哪些内容限定为表。 这可以包括数据库对象(如 Teradata 中的函数)或 Oracle 中的同义词。 PolyBase 无法作为外部表连接到某些 ODBC 对象,因此在 TABLE_LOCATION 列中没有值。 尽管缺少值 TABLE_LOCATION,但存在其中一个 ODBC 对象可能会使数据库或架构非空。

使用 sp_data_source_objectssp_data_source_table_columns 发现外部对象。 这些系统存储过程返回可用于虚拟化的表的架构。 Azure Data Studio 使用这两个存储过程来支持 数据虚拟化。 使用sp_data_source_table_columns发现SQL Server数据类型中表示的外部表架构。

包含数组的 MongoDB 集合的外部表

若要创建包含数组的 MongoDB 集合的外部表,应使用 Azure Data Studio 的数据虚拟化扩展,基于 PolyBase ODBC Driver for MongoDB 检测到的架构生成 CREATE EXTERNAL TABLE 语句。 驱动程序会自动执行平展操作。 或者,可使用 sp_data_source_objects (Transact-SQL) 来检测集合架构(列)并手动创建外部表。 sp_data_source_table_columns 存储过程还通过 PolyBase ODBC Driver for MongoDB 驱动程序自动执行平展。 Azure Data Studio 的数据虚拟化扩展和 sp_data_source_table_columns 使用相同的内部存储过程来查询外部架构。

数据源类型特定备注

  • Teradata

    Teradata 系统视图不使用行级别安全性 (RLS) ,因此用户可以看到它们无法查询的表的存在。

  • MongoDB

    某些早期版本的 MongoDB 将列出所有数据库的功能限制为类似于管理员的用户。 没有此权限的用户可能会收到尝试使用 null @object_root_name执行此过程的身份验证错误。

  • Oracle

    不支持将 Oracle 同义词用于 PolyBase。

示例

SQL Server

以下示例返回所有数据库、schemata 和表/视图

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“.”客户” 客户 [database]。[dbo]。[客户]
TABLE “database”。”dbo“.”item” item [database]。[dbo]。[item]
TABLE “database”。”dbo“.”国家” 国家 [database]。[dbo]。[国家]

以下示例返回所有数据库

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

以下示例返回数据库中的所有 schemata

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

以下示例返回架构中的所有表

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“.”客户” 客户 [database]。[dbo]。[客户]
TABLE “database”。”dbo“.”item” item [database]。[dbo]。[item]
TABLE “database”。”dbo“.”国家” 国家 [database]。[dbo]。[国家]
TABLE “database”。”dbo“.”orders” 订单 [database]。[dbo]。[订单]
TABLE “database”。”dbo“.”part” 部件 [database]。[dbo]。[part]

Oracle

以下示例返回完整的 schemata 和表、函数、视图等。

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”。”客户” 客户 [ORACLEOBJECTROOT]。[database]。[客户]

Teradata

以下示例返回所有数据库和表、函数、视图等。

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”。”客户” 客户 [database]。[客户]

Mongo DB

以下示例返回所有数据库和表。

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”。”客户” 客户 [database]。[客户]
TABLE “database”。”item” item [database]。[item]
TABLE “database”。”国家” 国家 [database]。[国家]
TABLE “database”。”orders” 订单 [database]。[订单]

另请参阅