SQL Server 2008:传递表值参数

2009-05-12 20:27:03来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

许多人一直希望能够实现把表格变量传递到存储过程中,如果变量可以被声明,那么它就应该能够被传递。而最新的SQL Server 2008则有这项功能!想知道如何才能把表格变量(包括内含的数据)传递到存储过程和功能中去吗?

为什么要传递表值参数?

用户常常会碰到许多需要把数值容器而非单个数值放到存储过程里的情况。对于大部分的编程语言而言,把容器数据结构传递到例程里或传递出来是很常见而且很必要的功能。TSQL也不例外。

SQL Server 2000通过OPENXML可以实现这个功能,用户可以把数据存储为VARCHAR数据类型然后进行传递。到了SQL Server 2005,随着 XML数据类型以及XQuery的出现,这个功能变得容易一点。但用户仍然需要对XML数据进行组建和粉碎才能够使用它,因此这个功能使用起来并不简单。SQL Server 2008则能够把表值数据类型传递到存储过程和功能中,从而大大地简化了编程的工作,因为程序员无需再花心思去组建和解析XML数据了。该功能还可以让客户方开发员传递客户方数据表格到数据库中。

如何传递表格参数?

以销售为例,首先建立一个 my SalesHistory表格,里面包含了产品销售的信息。写以下脚本就可以在数据库里创建你选择的表格:

以下为引用的内容:

  IFOBJECT_ID('SalesHistory')>0
  DROPTABLESalesHistory;
  GO
  CREATETABLE[dbo].[SalesHistory]
  (
  [SaleID][int]IDENTITY(1,1)NOTNULLPRIMARYKEY,
  [Product][varchar](10)NULL,
  [SaleDate][datetime]NULL,
  [SalePrice][money]NULL
  )
  GO

建立表值参数第一步是创建确切的表格类型,这一步非常重要,因为这样你就可以在数据库引擎里定义表格的结构,让你可以在需要的时候在过程代码里使用该表格。下面的代码创建 SalesHistoryTableType 表格类型定义:

以下为引用的内容:

 CREATETYPESalesHistoryTableTypeASTABLE
  (
  [Product][varchar](10)NULL,
  [SaleDate][datetime]NULL,
  [SalePrice][money]NULL
  )
  GO

如果想要查看系统里其他类型的表格类型定义,你可以执行下面这个查询命令,查看系统目录:

  SELECT * FROM sys.table_types

我们需要定义用来处理表值参数的存储过程。下面这个程序能够接受指定SalesHistoryTableType类型的表值参数,并加载到SalesHistory中,表值参数在Product列中的值为“BigScreen”:

以下为引用的内容:

  CREATEPROCEDUREusp_InsertBigScreenProducts
  (
  @TableVariableSalesHistoryTableTypeREADONLY
  )
  AS
  BEGIN
  INSERTINTOSalesHistory
  (
  Product,SaleDate,SalePrice
  )
  SELECT
  Product,SaleDate,SalePrice
  FROM
  @TableVariable
  WHERE
  Product='BigScreen'
  END
  GO

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:SQL Server游标使用实例

下一篇:微软SQL Server 2008令商业智能平民化