SQL中表变量的不足


  本文标签:SQL 表变量

  SQL中的表变量并不是完美无缺的,与SQL中的临时表相比,它存在着一些缺陷,具体如下:

  在表变量上不能创建非聚集索引(为 PRIMARY 或 UNIQUE 约束创建的系统索引除外)  。与具有非聚集索引的临时表相比,这可能会影响查询性能  。

  表变量不像临时表那样可以维护统计信息  。在表变量上,不能通过自动创建或使用 CREATE STATISTICS 语句来创建统计信息  。因此,在大表上进行复杂查询时,缺少统计信息可能会妨碍优化器确定查询的最佳计划,从而影响该查询的性能  。

  在初始 DECLARE 语句后不能更改表定义  。

  表变量不能在 INSERT EXEC (但经本人测试在sql2005可以使用insert vartable exec)或 SELECT INTO 语句中使用  。

  表类型声明中的检查约束、默认值以及计算所得的列不能调用用户定义的函数  。

  如果表变量是在 EXEC 语句或 sp_executesql 存储过程外创建的,则不能使用 EXEC 语句或 sp_executesql 存储过程来运行引用该表变量的动态 SQL Server 查询  。由于表变量只能在它们的本地作用域中引用,因此 EXEC 语句和 sp_executesql 存储过程将在表变量的作用域之外  。但是,您可以在 EXEC 语句或 sp_executesql 存储过程内创建表变量并执行所有处理,因为这样表变量本地作用域将位于 EXEC 语句或 sp_executesql 存储过程中  。