sp_special_columns (Transact-SQL)

适用于: SQL Server Azure 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_namesysname,没有默认值。 不支持通配符模式匹配。

[ @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.

  • 类型 R 返回最佳列或列集,通过从列或列检索值,允许唯一标识指定表中的任何行。 列可以是出于此目的设计的伪列,也可以是表任何唯一索引的列或列。

  • 当行中的任何值由任何事务更新时,类型 V 返回指定表中的列(如果有)由数据源自动更新。

[ @scope = ] 'scope'

ROWID 的最低所需范围。 @scope为 char(1),默认值为 T.

  • 范围 C 指定仅当放置在该行上时 ROWID 才有效。
  • 范围 T 指定 ROWID 对事务有效。

[ @nullable = ] 'nullable'

指定特殊列是否可以接受值 NULL@nullablechar(1),默认值为 U.

  • O 指定不允许 null 值的特殊列。
  • U 指定部分可为 null 的列。

[ @ODBCVer = ] ODBCVer

正在使用的 ODBC 版本。 @ODBCVer为 int,默认值为 2. 此值指示 ODBC 版本 2.0。 有关 ODBC 版本 2.0 和 ODBC 版本 3.0 之间的差异的详细信息,请参阅 SQLSpecialColumns ODBC 版本 3.0 的 ODBC 规范。

返回代码值

无。

结果集

列名称 数据类型 描述
SCOPE smallint 行 ID 的实际作用域。 可以是 012。 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 数据源依赖数据类型名称;例如 char、varcharmoneytext
PRECISION int 数据源中的列的精度。 此字段始终返回值。
LENGTH int 数据源中数据类型的二进制格式(例如 10 char(10)4 整数2 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';