sp_data_source_table_columns (Transact-SQL)
适用于:SQL Server 2019 (15.x)
返回外部数据源表中的列的列表。
注意
此过程在 SQL 2019 CU5 中引入。
语法
sp_data_source_table_columns
[ @data_source = ] 'data_source'
, [ @table_location = ] 'table_location'
[ ; ]
参数
[ @data_source = ] 'data_source'
要从中获取元数据的外部数据源的名称。 类型为 sysname
。
[ @table_location = ] 'table_location'
标识表的表位置字符串。 table_location
类型为 nvarchar(max)
。
结果集
存储过程返回以下信息:
列名称 | 数据类型 | 描述 |
---|---|---|
name |
nvarchar(max) | 列的名称。 |
type |
nvarchar(200) | SQL Server 类型名称。 |
length |
int | 列的长度。 |
precision |
int | 列的精度。 |
scale |
int | 列的小数位数。 |
collation |
nvarchar(200) | SQL Server 列的排序规则。 |
is_nullable |
bit | 1 = 可为 null,0 = 不可为 null。 |
source_type_name |
nvarchar(max) | 特定于后端的类型名称。 主要用于调试。 对于 ODBC 源,source_type_name 对应于 SQLColumns() 的 TYPE_NAME 结果列。 |
remarks |
nvarchar(max) | 列的常规注释或说明。 当前始终为 NULL 。 |
权限
需要 ALTER ANY EXTERNAL DATA SOURCE
权限。
注解
SQL Server 实例必须安装 PolyBase 功能。
此存储过程支持以下项的连接器:
- SQL Server
- Oracle
- Teradata
- MongoDB
- Azure Cosmos DB
存储过程不支持通用 ODBC 数据源或 Hadoop 连接器。
空与非空的概念与 ODBC 驱动程序和 SQL 表函数的行为相关。 非空表示对象包含表,而不是行。 例如,空架构不包含 SQL Server 中的表。 空数据库包含 Teradata 内没有的表。 结果是后端架构的 SQL Server 表示形式,由后端的 PolyBase 连接器解释。 此处的区别在于,结果不是仅仅将 ODBC 调用的结果传递到后端,而是基于 PolyBase 类型映射代码的结果。
使用 sp_data_source_objects 和 sp_data_source_table_columns
发现外部对象。 这些系统存储过程会返回可供虚拟化的表的架构。 Azure Data Studio 使用这两个存储过程来支持数据虚拟化。 使用 sp_data_source_table_columns
来发现 SQL Server 数据类型中表示的外部表架构。
由于 Hadoop 源数据中的排序规则与 SQL Server 2019 (15.x) 中支持的排序规则之间的差异,外部表中 varchar 数据类型列的建议数据类型长度可能比预期要大得多。 这是设计的结果。
不支持将 Oracle 同义词用于 PolyBase。
示例
以下示例返回 SQL Server 中名为 server
的外部表的表列,该表属于名为 schema
的架构。
DECLARE @data_source SYSNAME = N'ExternalDataSourceName';
DECLARE @table_location NVARCHAR(400) = N'[database].[schema].[table]';
EXEC sp_data_source_table_columns
@data_source,
@table_location;