科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道SQL Server 2008新功能──传递表值参数

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

许多人一直希望能够实现把表格变量传递到存储过程中,如果变量可以被声明,那么它就应该能够被传递。而最新的SQL Server 2008则有这项功能!

作者:赛迪网 萧含月 来源:天新网 2008年3月21日

关键字: 数据库 Mssql SQL SQL Server

  • 评论
  • 分享微博
  • 分享邮件

在传递表值变量到程序中时必须使用 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往返旅程数、利用表格限制并扩展编程在数据库引擎中的功能。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章