分享方式:


sp_special_columns (Transact-SQL)

適用於:SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體

傳回可唯一識別數據表中數據列的最佳數據行集。 此外,當交易更新數據列中的任何值時,也會傳回自動更新的數據行。

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_name為 sysname,沒有預設值。 不支援通配符模式比對。

[ @table_owner = ] N'table_owner'

用來傳回目錄信息的數據表擁有者。 @table_owner為 sysname 預設值為 NULL。 不支援通配符模式比對。 如果未 指定@table_owner ,則會套用基礎資料庫管理系統 (DBMS) 的預設數據表可見性規則。

在 SQL Server 中,如果目前用戶擁有具有指定名稱的數據表,則會傳回該數據表的數據行。 如果未指定@table_owner,且目前用戶沒有指定之@table_name的數據表,則此程式會尋找資料庫擁有者所擁有的指定@table_name數據表。 如果數據表存在,則會傳回其數據行。

[ @table_qualifier = ] N'table_qualifier'

數據表限定符的名稱。 @table_qualifier為 sysname,預設值為 NULL。 各種 DBMS 產品支援數據表的三部分命名(<qualifier>.<owner>.<name>)。 在 SQL Server 中,此資料行代表資料庫名稱。 在某些產品中,它代表數據表之資料庫環境的伺服器名稱。

[ @col_type = ] 'col_type'

數據行類型。 @col_type為 char(1),預設值為 R

  • Type R 會透過從資料行或資料行擷取值,傳回最佳數據行或數據行集,讓指定資料表中的任何數據列能夠唯一識別。 數據行可以是針對此目的所設計的虛擬數據行,或是數據表中任何唯一索引的數據行。

  • Type V 會傳回指定資料表中的數據行或數據行,如果有的話,當數據列中的任何值由任何交易更新時,數據源會自動更新。

[ @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,預設值為 2。 此值表示 ODBC 2.0 版。 如需 ODBC 2.0 版與 ODBC 3.0 版之間差異的詳細資訊,請參閱 ODBC 3.0 版的 ODBC SQLSpecialColumns 規格。

傳回碼值

無。

結果集

資料行名稱 資料類型 描述
SCOPE smallint 數據列標識碼的實際範圍。 可以是 012。 SQL Server 一律會傳 0回 。 此欄位一律會傳回值。

0 = SQL_SCOPE_CURROW。 數據列標識碼保證只有在位於該數據列時才有效。 如果數據列已由另一筆交易更新或刪除數據列,則稍後使用數據列標識元重新選取可能不會傳回數據列。
1 = SQL_SCOPE_TRANSACTION。 數據列標識元保證在目前交易期間有效。
2 = SQL_SCOPE_SESSION。 數據列標識碼保證在會話期間有效(跨交易界限)。
COLUMN_NAME sysname 傳回之@table_name每個數據行的數據行名稱。 此欄位一律會傳回值。
DATA_TYPE smallint ODBC SQL 資料類型。
TYPE_NAME sysname 數據源相依數據類型名稱;例如 char、varcharmoneytext
PRECISION int 數據源上數據行的有效位數。 此欄位一律會傳回值。
LENGTH int 在數據源的二進位格式中,數據類型所需的長度,以位元組為單位,例如 10 char(10)4integer2 smallint。
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 相當於 SQLSpecialColumns ODBC 中的 。 傳回的結果會依 SCOPE排序。

權限

SELECT需要架構的許可權。

範例

下列範例會傳回可唯一識別數據表中 HumanResources.Department 數據列之數據行的相關信息。

USE AdventureWorks2022;
GO

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