sp_columns (Transact-SQL)

返回在当前环境中可查询的指定对象的列信息。

主题链接图标Transact-SQL 语法约定

语法

sp_columns [ @table_name = ] object  [ , [ @table_owner = ] owner ] 
     [ , [ @table_qualifier = ] qualifier ] 
     [ , [ @column_name = ] column ] 
     [ , [ @ODBCVer = ] ODBCVer ]

参数

  • [ @table_name=] object
    用于返回目录信息的对象的名称。object 可以为表、视图或其他具有列(如表值函数)的对象。object 的数据类型为 nvarchar(384),无默认值。支持通配符模式匹配。

  • [ @table_owner=] owner
    用于返回目录信息的对象的所有者。owner 的数据类型为 nvarchar(384),默认值是 NULL。支持通配符模式匹配。如果未指定 owner,则遵循基础 DBMS 的默认对象可见性规则。

    如果当前用户拥有一个具有指定名称的对象,则返回该对象的列。如果未指定 owner,并且当前用户不拥有包含指定 object 的对象,则 sp_columns 将查找数据库所有者拥有的包含指定 object 的对象。如果存在这样的对象,则返回该对象的列。

  • [ @table_qualifier=] qualifier
    对象限定符的名称。qualifier 的数据类型为 sysname,默认值为 NULL。许多 DBMS 产品都支持对象的三部分构成命名方式。(qualifier**.owner.**name).在 SQL Server 中,此列表示数据库名称。在某些产品中,它表示对象数据库环境的服务器名称。

  • [ @column_name=] column
    一个单独的列,当只需要目录信息的一列时可使用该参数。column 的数据类型为 nvarchar(384),默认值是 NULL。如果未指定 column,则返回所有列。在 SQL Server 中,column 表示在 syscolumns 表中列出的列名。支持通配符模式匹配。为了获得最大互操作性,网关客户端应只采用 SQL-92 标准模式匹配(% 和 _ 通配符)。

  • [ @ODBCVer=] ODBCVer
    所使用的 ODBC 的版本。ODBCVer 的数据类型为 int,默认值为 2。这指示 ODBC 版本 2。有效值为 2 或 3。对于版本 2 和 3 之间的行为差异,请参阅 ODBC SQLColumns 规范。

返回代码值

结果集

sp_columns 目录存储过程与 ODBC 中的 SQLColumns 等价。返回的结果按 TABLE_QUALIFIERTABLE_OWNERTABLE_NAME 排序。

列名

数据类型

说明

TABLE_QUALIFIER

sysname

对象限定符名称。该字段可以为 NULL。

TABLE_OWNER

sysname

对象所有者名称。此字段始终返回值。

TABLE_NAME

sysname

对象名。此字段始终返回值。

COLUMN_NAME

sysname

所返回的 TABLE_NAME 中每列的列名。该字段始终返回值。

DATA_TYPE

smallint

ODBC 数据类型的整数代码。如果该数据类型无法映射到 ODBC 类型,则为 NULL。本机数据类型名称在 TYPE_NAME 列中返回。

TYPE_NAME

sysname

表示数据类型的字符串。基础 DBMS 提供此数据类型的名称。

PRECISION

int

有效数字位数。PRECISION 列的返回值以 10 为基数。

LENGTH

int

数据的传输大小。1

SCALE

smallint

小数点右边的数字位数。

RADIX

smallint

数值数据类型的基数。

NULLABLE

smallint

指定为 Null 性。

1 = 可以为 NULL。

0 = 不可以为 NULL。

REMARKS

varchar(254)

该字段总是返回 NULL。

COLUMN_DEF

nvarchar(4000)

列的默认值。

SQL Server 2008 和 SQL Server 2005 对目录元数据中的 SQL 表达式进行解码和存储的方式不同于 SQL Server 2000。解码后的表达式的语义与原始文本相同,但不能保证语法正确无误。例如,解码后的表达式中删除了空格。有关详细信息,请参阅SQL Server 2008 R2 中数据库引擎功能的行为更改

SQL_DATA_TYPE

smallint

SQL 数据类型出现在描述符的 TYPE 字段中时的值。该列与 DATA_TYPE 列相同,datetime 和 SQL-92 interval 数据类型除外。该列始终返回值。

SQL_DATETIME_SUB

smallint

datetime 及 SQL-92 interval 数据类型的子类型代码。对于其他数据类型,该列返回 NULL。

CHAR_OCTET_LENGTH

int

字符或整数数据类型的列的最大长度(字节)。对于所有其他数据类型,该列返回 NULL。

ORDINAL_POSITION

int

列在对象中的序号位置。对象中的第一列为 1。此列始终返回值。

IS_NULLABLE

varchar(254)

对象中的列是否可为 Null。根据 ISO 规则确定是否可为 Null。遵从 ISO SQL 标准的 DBMS 不能返回空字符串。

YES = 列可以包含 NULL。

NO = 列不能包含 NULL。

如果为 Null 性为未知,该列将返回零长度字符串。

该列的返回值与 NULLABLE 列返回的值不同。

SS_DATA_TYPE

tinyint

扩展存储过程使用的 SQL Server 数据类型。有关详细信息,请参阅数据类型 (Transact-SQL)

1 有关详细信息,请参阅 Microsoft ODBC 文档。

权限

需要对架构的 SELECT 权限。

注释

sp_columns 遵循分隔标识符的要求。有关详细信息,请参阅分隔标识符(数据库引擎)

示例

以下示例返回指定表的列信息。

USE AdventureWorks2008R2;
GO
EXEC sp_columns @table_name = N'Department',
   @table_owner = N'HumanResources';