次の方法で共有


sp_data_source_table_columns (Transact-SQL)

適用対象: SQL Server 2019 (15.x)

外部データ ソース テーブル内の列のリストを返します。

Note

この手順は、SQL 2019 CU5 で 導入されています。

Transact-SQL 構文表記規則

構文

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_nameTYPE_NAMESQLColumns() 結果列に対応します。
remarks nvarchar(max) 列の一般的なコメントまたは説明。 現時点では、常に NULL です。

アクセス許可

ALTER ANY EXTERNAL DATA SOURCE 権限が必要です。

解説

SQL Server インスタンスには、PolyBase 機能がインストールされている必要があります。

このストアド プロシージャでは、次のコネクタがサポートされています。

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

ストアド プロシージャは、汎用 ODBC データ ソースまたは Hadoop コネクタをサポートしていません。

空と空以外の概念は、ODBC ドライバーと SQLTables 関数の動作に関連します。 空でない場合は、オブジェクトに行ではなくテーブルが含まれていることを示します。 たとえば、空のスキーマには SQL Server にテーブルが含まれています。 空のデータベースには、Teradata 内にテーブルが含まれています。 結果は、バックエンドの PolyBase コネクタによって解釈されるバックエンド スキーマの SQL Server 表現です。 ここでの違いは、単に ODBC 呼び出しの結果をバックエンドに渡すのではなく、PolyBase 型マッピング コードの結果に基づくということです。

外部オブジェクトを検出するために sp_data_source_objects および sp_data_source_table_columns を使用します。 これらのシステム ストアド プロシージャは、仮想化可能なテーブルのスキーマを返します。 Azure Data Studio では、これら 2 つのストアド プロシージャを使用してデータ仮想化をサポートします。 sp_data_source_table_columns を使用して、SQL Server データ型で表される外部テーブル スキーマを検出します。

Hadoop ソース データの照合順序と SQL Server 2019 (15.x) でサポートされている照合順序の違いにより、外部テーブルの varchar データ型列に推奨されるデータ型の長さは、予想よりもはるかに大きくなる可能性があります。 これは仕様です。

PolyBase での使用では、Oracle シノニムはサポートされていません。

次の例では、名前付きの スキーマ schema に属する SQL Server server の外部テーブルのテーブル列を返します。

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;