表 (Transact-SQL)

更新日期: 2005 年 12 月 5 日

一种特殊的数据类型,用于存储结果集以进行后续处理。table 主要用于临时存储一组作为表值函数的结果集返回的行。

ms175010.note(zh-cn,SQL.90).gif注意:
若要声明 table 类型的变量,请使用 DECLARE @local_variable

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

语法


table_type_definition ::= 
    TABLE ( { column_definition | table_constraint } [ ,...n ] ) 

column_definition ::= 
        column_name scalar_data_type 
    [ COLLATE collation_definition ] 
    [ [ DEFAULT constant_expression ] | IDENTITY [ ( seed , increment ) ] ] 
    [ ROWGUIDCOL ] 
    [ column_constraint ] [ ...n ] 

column_constraint ::= 
    { [ NULL | NOT NULL ] 
    | [ PRIMARY KEY | UNIQUE ] 
    | CHECK ( logical_expression ) 
    } 

table_constraint ::= 
     { { PRIMARY KEY | UNIQUE } ( column_name [ ,...n ] ) 
     | CHECK ( logical_expression ) 
     } 

参数

  • collation_definition
    由 Microsoft Windows 区域设置和比较样式、Windows 区域设置和二进制表示法或 Microsoft SQL Server 2005 排序规则组成的列的排序规则。如果未指定 collation_definition,则此列将继承当前数据库的排序规则。另外,如果将此列定义为公共语言运行时 (CLR) 用户定义类型,则它将继承用户定义类型的排序规则。

备注

可将函数和变量声明为 table 类型。table 变量可用于函数、存储过程和批处理中。

ms175010.note(zh-cn,SQL.90).gif重要提示:
修改 table 变量的查询不会生成并行查询执行计划。修改特大型 table 变量或复杂查询中的 table 变量时,可能会影响性能。在这种情况下,请考虑改用临时表。有关详细信息,请参阅 CREATE TABLE (Transact-SQL)。还可以并行执行读取 table 变量而不对变量进行修改的查询。

table 变量具有下列优点:

  • A. table 变量的行为类似于局部变量,有明确定义的作用域。这就是在其中声明该变量的函数、存储过程或批处理。
    在其作用域内,table 变量可像常规表那样使用。该变量可应用于 SELECT、INSERT、UPDATE 和 DELETE 语句中用到表或表的表达式的任何地方。但是,table 不能用于以下语句中:

    SELECT select_list INTO table_variable   
    

    在定义 table 变量的函数、存储过程或批处理结束时,会自动清除此变量。

  • table 类型声明中的 CHECK 约束、DEFAULT 值和计算列不能调用用户定义函数。

  • 在存储过程中使用 table 变量与使用临时表相比,减少了存储过程的重新编译量。

  • 涉及 table 变量的事务只在 table 变量更新期间存在。因此减少了 table 变量对锁定和记录资源的需求。

不能显式创建 table 变量的索引,也不保留 table 变量的任何统计信息。在某些情况下,可以通过改用支持索引和统计信息的临时表来改善性能。有关临时表的详细信息,请参阅CREATE TABLE (Transact-SQL)

可以在批处理的 FROM 子句中按名称引用 table 变量,如下例所示:

SELECT Employee_ID, Department_ID FROM @MyTableVar

在 FROM 子句外,必须使用别名来引用 table 变量,如下例所示:

SELECT EmployeeID, DepartmentID 
FROM @MyTableVar m
JOIN Employee on (m.EmployeeID =Employee.EmployeeID AND
   m.DepartmentID = Employee.DepartmentID)

不支持在 table 变量之间进行赋值操作。另外,由于 table 变量作用域有限,并且不是持久数据库的一部分,因而不受事务回滚的影响。

请参阅

参考

COLLATE (Transact-SQL)
CREATE FUNCTION (Transact-SQL)
CREATE TABLE (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)

其他资源

表值用户定义函数

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

版本 历史记录

2005 年 12 月 5 日

新增内容:
  • 添加了有关何时不指定 collation_definition 参数的排序规则信息。
已更改的内容:
  • 修改了有关 table 变量和并行度的重要说明。