sp_special_columns (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

テーブル内の行を一意に識別する最適な列セットを返します。 また、行の値がトランザクションによって更新されると、自動的に更新される列も返されます。

Transact-SQL 構文表記規則

構文

sp_special_columns
    [ @table_name = ] N'table_name'
    [ , [ @table_owner = ] N'table_owner' ]
    [ , [ @table_qualifier = ] N'table_qualifier' ]
    [ , [ @col_type = ] 'col_type' ]
    [ , [ @scope = ] 'scope' ]
    [ , [ @nullable = ] 'nullable' ]
    [ , [ @ODBCVer = ] ODBCVer ]
[ ; ]

引数

[ @table_name = ] N'table_name'

カタログ情報を返すために使用するテーブルの名前。 @table_namesysname で、既定値はありません。 ワイルドカード パターン マッチングはサポートされていません。

[ @table_owner = ] N'table_owner'

カタログ情報を返すために使用されるテーブルのテーブル所有者。 @table_ownersysname で、既定値は NULL です。 ワイルドカード パターン マッチングはサポートされていません。 @table_ownerが指定されていない場合は、基になるデータベース管理システム (DBMS) の既定のテーブル可視性ルールが適用されます。

SQL Server では、指定した名前のテーブルを現在のユーザーが所有している場合、そのテーブルの列が返されます。 @table_ownerが指定されておらず、現在のユーザーが指定した@table_nameのテーブルを所有していない場合、このプロシージャは、データベース所有者が所有する指定した@table_nameのテーブルを検索します。 テーブルが存在する場合は、その列が返されます。

[ @table_qualifier = ] N'table_qualifier'

テーブル修飾子の名前。 @table_qualifiersysname で、既定値は NULL です。 さまざまな DBMS 製品では、テーブルの 3 部構成の名前付け (<qualifier>.<owner>.<name>) がサポートされています。 SQL Server では、この列はデータベース名を表します。 一部の製品では、テーブルのデータベース環境のサーバー名を表します。

[ @col_type = ] 'col_type'

列の種類。 @col_typechar(1) で、既定値は R です。

  • R は、列または列から値を取得することで、指定したテーブル内の任意の行を一意に識別できる最適な列または列のセットを返します。 列には、この目的のために設計された疑似列、またはテーブルの一意のインデックスの列または列を指定できます。

  • type V は、指定したテーブルの列 (存在する場合) を返します。この列は、行の値がトランザクションによって更新されたときにデータ ソースによって自動的に更新されます。

[ @scope = ] 'scope'

ROWID の最低限必要なスコープ。 @scopechar(1) で、既定値は T です。

  • スコープ C は、ROWID がその行に配置されている場合にのみ有効であることを指定します。
  • スコープ T は、ROWID がトランザクションに対して有効であることを指定します。

[ @nullable = ] 'nullable'

特殊列が NULL 値を受け取ることができるかどうかを指定します。 @nullablechar(1) で、既定値は U です。

  • O は、null 値を許可しない特殊な列を指定します。
  • U は、部分的に null 許容の列を指定します。

[ @ODBCVer = ] ODBCVer

使用されている ODBC バージョン。 @ODBCVerint で、既定値は 2 です。 この値は、ODBC バージョン 2.0 を示します。 ODBC バージョン 2.0 と ODBC バージョン 3.0 の違いの詳細については、ODBC バージョン 3.0 の ODBC SQLSpecialColumns 仕様を参照してください。

リターン コードの値

なし。

結果セット

列名 データ型 説明
SCOPE smallint 行 ID の実際のスコープ。 01、または 2 を指定できます。 SQL Server は常に 0を返します。 このフィールドには常に値が返されます。

0 = SQL_SCOPE_CURROW。 行 ID は、その行に配置されている間のみ有効であることが保証されます。 行が別のトランザクションによって更新または削除された場合、行 ID を使用して後で再選択しても行が返されない場合があります。
1 = SQL_SCOPE_TRANSACTION。 行 ID は、現在のトランザクションの期間中有効であることが保証されます。
2 = SQL_SCOPE_SESSION。 行 ID は、セッションの期間中 (トランザクション境界を越えて) 有効であることが保証されます。
COLUMN_NAME sysname 返される @table_name の各列の列名。 このフィールドには常に値が返されます。
DATA_TYPE smallint ODBC SQL データ型。
TYPE_NAME sysname データ ソースに依存するデータ型名。たとえば、 charvarcharmoneytextなどです。
PRECISION int データ ソースの列の有効桁数。 このフィールドには常に値が返されます。
LENGTH int データ ソース内のバイナリ形式のデータ型に必要な長さ (バイト単位)、たとえば、char(10)10integer4smallint の2など
SCALE smallint データ ソースの列のスケール。 NULL は、スケールが適用されないデータ型に対して返されます。
PSEUDO_COLUMN smallint その列が疑似列であるかどうかを示します。 SQL Server は常に 1を返します。

0 = SQL_PC_UNKNOWN
1 = SQL_PC_NOT_PSEUDO
2 = SQL_PC_PSEUDO

解説

sp_special_columns は ODBC の SQLSpecialColumns と同じです。 返される結果は、 SCOPE順に並べ替えます。

アクセス許可

スキーマに対する SELECT アクセス許可が必要です。

次の例では、 HumanResources.Department テーブル内の行を一意に識別する列に関する情報を返します。

USE AdventureWorks2022;
GO

EXEC sp_special_columns @table_name = 'Department',
    @table_owner = 'HumanResources';