表 (Transact-SQL)
更新日期: 2005 年 12 月 5 日
一种特殊的数据类型,用于存储结果集以进行后续处理。table 主要用于临时存储一组作为表值函数的结果集返回的行。
注意: |
---|
若要声明 table 类型的变量,请使用 DECLARE @local_variable。 |
语法
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 )
}
参数
table_type_definition
与在 CREATE TABLE 中定义表时所用的信息子集相同的信息子集。表声明包括列定义、名称、数据类型和约束。允许的约束类型仅为 PRIMARY KEY、UNIQUE KEY 和 NULL。有关语法的详细信息,请参阅 CREATE TABLE (Transact-SQL)、CREATE FUNCTION (Transact-SQL) 和 DECLARE @local\_variable (Transact-SQL)。
- collation_definition
由 Microsoft Windows 区域设置和比较样式、Windows 区域设置和二进制表示法或 Microsoft SQL Server 2005 排序规则组成的列的排序规则。如果未指定 collation_definition,则此列将继承当前数据库的排序规则。另外,如果将此列定义为公共语言运行时 (CLR) 用户定义类型,则它将继承用户定义类型的排序规则。
备注
可将函数和变量声明为 table 类型。table 变量可用于函数、存储过程和批处理中。
重要提示: |
---|
修改 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)
其他资源
帮助和信息
更改历史记录
版本 | 历史记录 |
---|---|
2005 年 12 月 5 日 |
|