4.6.2 创建表变量来保存临时结果集

来源:互联网 发布:大ip什么意思网络用语 编辑:程序博客网 时间:2024/04/28 20:58

创建表变量的语法和创建表的相似,不同的是使用DECLARE关键字,并且表名有@符号前缀:

  1. DECLARE @TableName TABLE   
  2.    (column_name <data_type> [ NULL | NOT NULL ] [ ,...n ] ) 

在这个示例中,使用表变量的方式和前面技巧中使用临时表的方式相似。这个示例演示实现的不同(包括不显式地DROP表的方法):

  1. DECLARE @ProductCostStatistics TABLE   
  2. ( ProductID int NOT NULL PRIMARY KEY,  
  3.   AvgStandardCost money NOT NULL,  
  4.   ProductCount int NOT NULL)  
  5.  
  6. INSERT @ProductCostStatistics  
  7. (ProductID, AvgStandardCost, ProductCount)  
  8. SELECT ProductID,  
  9.       AVG(StandardCost) AvgStandardCost,  
  10.       COUNT(ProductID) Rowcnt  
  11. FROM Production.ProductCostHistory  
  12. GROUP BY ProductID  
  13.  
  14. SELECT TOP 3 *  
  15. FROM @ProductCostStatistics  
  16. ORDER BY ProductCount 

这个查询返回:

  1. ProductID    AvgStandardCost    ProductCount  
  2. 710          3.3963             1  
  3. 709          3.3963             1  
  4. 731          352.1394           1 

解析

这个技巧使用表变量的方式和前面技巧使用临时表的方式基本一样。不过,两个技巧还是有重要区别的。

首先,这次的表变量使用DECLARFE @ Tablename TABLE而不是CREATE TABLE来定义。其次,和临时表技巧不同,该技巧在每个语句后面没有GO,因为临时表只能在批处理、存储过程或函数中存在。

在技巧的后面一部分中,像使用普通表一样从表变量插入和查询,不同的是这次使用@tablename格式:

  1. INSERT @ProductCostStatistics  
  2. ...  
  3.  
  4. SELECT TOP 3 *  
  5. FROM @ProductCostStatistics  
  6. ... 

在示例的最后并不需要使用DROP TABLE,因为在批处理/存储过程/函数执行后表变量就从内存中消失了。

原创粉丝点击