sp_special_columns (Transact-SQL)

适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。

主题链接图标 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 产品都支持表的三部分构成命名方式 (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 值。 nullable 的数据类型为 char(1),默认值为 U。 O 指定不允许接受 Null 值的特殊列。 U 指定可部分为空的列。

  • [ @ODBCVer=\] 'ODBCVer'
    所使用的 ODBC 版本。 ODBCVer 的数据类型为 int(4),默认值为 2。 这指示 ODBC 版本 2.0。 有关 ODBC 2.0 版和 ODBC 3.0 版之间差别的详细信息,请参阅 ODBC 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

数据源中二进制格式数据类型要求的长度(以字节为单位)。例如,10 代表 char(10),4 代表 integer,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 等效于 ODBC 中的 SQLSpecialColumns。 返回的结果按 SCOPE 排序。

权限

需要对架构的 SELECT 权限。

示例

以下示例将返回有关特定列的信息,该列唯一标识了 HumanResources.Department 表中的行。

USE AdventureWorks2012;
GO
EXEC sp_special_columns @table_name = 'Department' 
    ,@table_owner = 'HumanResources';

请参阅

参考

目录存储过程 (Transact-SQL)

系统存储过程 (Transact-SQL)