sp_special_columns (Transact-SQL)
テーブル内の行を一意に識別する列の最適集合を返します。 トランザクションが行の任意の値を更新した場合に自動的に更新される列も返します。
構文
sp_special_columns [ @table_name = ] 'table_name'
[ , [ @table_owner = ] 'table_owner' ]
[ , [ @qualifier = ] 'qualifier' ]
[ , [ @col_type = ] 'col_type' ]
[ , [ @scope = ] 'scope' ]
[ , [ @nullable = ] 'nullable' ]
[ , [ @ODBCVer = ] 'ODBCVer' ]
[ ; ]
引数
[ @table\_name=\] 'table_name'
カタログ情報を返すために使用するテーブルの名前です。 name のデータ型は sysname で、既定値はありません。 ワイルドカードによるパターン照合はサポートされていません。[ @table\_owner=\] 'table_owner'
カタログ情報を返すために使用するテーブルのテーブル所有者です。 owner のデータ型は sysname で、既定値は NULL です。 ワイルドカードによるパターン照合はサポートされていません。 owner を指定しない場合は、基になる DBMS の既定のテーブル可視性規則が適用されます。SQL Server では、指定した名前のテーブルを現在のユーザーが所有している場合、そのテーブルの列が返されます。 owner を指定せず、また指定した name のテーブルを現在のユーザーが所有していない場合、このプロシージャでは、データベース所有者が所有する name のテーブルが検索されます。 テーブルが存在する場合は、その列が返されます。
[ @qualifier=\] 'qualifier'
テーブル識別子の名前です。 qualifier のデータ型は sysname で、既定値は NULL です。 さまざまな DBMS 製品において、テーブル名には 3 つの要素から成る名前 (qualifier.owner.name) がサポートされています。 SQL Server では、この列はデータベース名を表します。 製品によっては、テーブルのデータベース環境のサーバー名を表す場合があります。[ @col\_type=\] 'col_type'
列の種類です。 col_type のデータ型は char(1) で、既定値は R です。 種類 R は、列から値を取得することによって、指定したテーブル内にある任意の行を一意に識別できる、最適な列または列のセットを返します。 列は、この目的のために特別に設計された疑似列、または、テーブルでインデックスが一意な 1 つ以上の列になります。 種類 V は、指定したテーブルに自動更新される列が 1 つ以上存在する場合、該当する列または列のセットを返します。この列は、トランザクションによって行の値が更新されると、データ ソースによって自動的に更新される列です。[ @scope=\] 'scope'
ROWID の最低限必要な範囲を指定します。 scope のデータ型は char(1) で、既定値は T です。 範囲 C は、ROWID がその行に位置している場合にのみ有効であることを指定します。 範囲 T は、ROWID がトランザクションに対して有効であることを指定します。[ @nullable=\] 'nullable'
特別列に NULL 値を認めるかどうかを示します。 nullable のデータ型は char(1) で、既定値は U です。 O は、NULL 値を許容しない特別列を指定します。 U は部分的に NULL を許容する列を指定します。[ @ODBCVer=\] 'ODBCVer'
使用する ODBC のバージョンを指定します。 ODBCVer のデータ型は int(4) で、既定値は 2 です。 既定値は ODBC Version 2.0 を示します。 ODBC Version 2.0 と ODBC Version 3.0 の違いについては、ODBC Version 3.0 の ODBC SQLSpecialColumns の仕様を参照してください。
リターン コードの値
なし
結果セット
列名 |
データ型 |
説明 |
---|---|---|
SCOPE |
smallint |
行 ID の実際の範囲。 0、1、または 2 になる場合があります。 SQL Server は常に 0 を返します。 このフィールドは常に値を返します。 0 = SQL_SCOPE_CURROW。 行 ID は、その行に位置している間のみ有効であることが保証されます。 その行が別のトランザクションによって更新または削除された場合は、後でその行 ID を使って再度選択しても行は返されません。 1 = SQL_SCOPE_TRANSACTION。 行 ID は現在のトランザクションの間は、有効であることが保証されます。 2 = SQL_SCOPE_SESSION。 行 ID は、セッションの間は (複数のトランザクションにまたがって) 有効であることが保証されます。 |
COLUMN_NAME |
sysname |
返される table の各列の列名。 このフィールドは常に値を返します。 |
DATA_TYPE |
smallint |
ODBC SQL データ型。 |
TYPE_NAME |
sysname |
データ ソースに依存するデータ型の名前。たとえば、char、varchar、money、または text です。 |
PRECISION |
Int |
データ ソース上の列の有効桁数。 このフィールドは常に値を返します。 |
LENGTH |
Int |
データ ソースでのデータ型のバイナリ形式に必要な長さ (バイト単位)。たとえば、char(10) の場合は 10、integer の場合は 4、smallint の場合は 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 AdventureWorks2012;
GO
EXEC sp_special_columns @table_name = 'Department'
,@table_owner = 'HumanResources';