SQL Server 2008新功能──传递表值参数

ZDNet软件频道 时间:2008-09-22 作者:赛迪网 萧含月 | 天新网 我要评论()
本文关键词:数据库 Mssql SQL SQL Server
许多人一直希望能够实现把表格变量传递到存储过程中,如果变量可以被声明,那么它就应该能够被传递。而最新的SQL Server 2008则有这项功能!

在传递表值变量到程序中时必须使用 READONLY从句。表格变量里的数据不能做修改——除了修改你可以把数据用于任何其他的操作。另外,你也不能把表格变量用做OUTPUT参数——只能用做input参数。

使用自己的新表格变量类型

首先,要声明一个变量类型SalesHistoryTableType,不需要再一次定义表格结构,因为在创建这个表格类型的时候已经定义过了。

  DECLARE @DataTable AS SalesHistoryTableType 
  The following script adds 1,000 records into my @DataTable table variable: 
  DECLARE @i SMALLINT 
  SET @i = 1 
  WHILE (@i <=1000) 
  BEGIN 
  INSERT INTO @DataTable(Product, SaleDate, SalePrice) 
  VALUES ("Computer", DATEADD(mm, @i, "3/11/1919"), DATEPART(ms, GETDATE()) + (@i + 57)) 
  INSERT INTO @DataTable(Product, SaleDate, SalePrice) 
  VALUES("BigScreen", DATEADD(mm, @i, "3/11/1927"), DATEPART(ms, GETDATE()) + (@i + 13)) 
  INSERT INTO @DataTable(Product, SaleDate, SalePrice) 
  VALUES("PoolTable", DATEADD(mm, @i, "3/11/1908"), DATEPART(ms, GETDATE()) + (@i + 29)) 
  SET @i = @i + 1 
  END


    只要把数据加载到表格变量里,就可以把结构传递到存储过程中。

注意:当表格变量作为参数传递后,表格会在存储在tempdb系统数据库里,而不是传递整个数据集在内存里。因为这样保证高效处理大批量数据。所有服务器方的表格变量参数传递都是通过使用reference调用tempdb中的表格。

EXECUTE usp_InsertBigScreenProducts 
@TableVariable = @DataTable

想要查询程序是否和预想效果一样,可以执行以下查询来看记录是否已经插入到 SalesHistory表格中:

SELECT * FROM SalesHistory

总结:

虽然SQL Server 2008的参数传递功能的使用还有一些小小的局限性,比如不能修改参数中的数据和把变量用于output,但是它大大提高了程序性能,它可以减少server往返旅程数、利用表格限制并扩展编程在数据库引擎中的功能。

数据库

Mssql

SQL

SQL Server


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134