在SQL Server 2008中运用表值参数(TVP)(2)_Mssql数据库教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:SQL Server数据库增强版备份体验
老鸟说事:Microsoft SQL Server数据库增强版备份体验 在欧洲,有一首流传很广的民谚: 因为丢失一根铁钉,我们失去了一块马蹄铁; 因为失去一块马蹄铁,我们失去了一匹骏马; 因为失去

 除了简单的查找源系统键的代理键之外,还有一种情况可利用表值参数,即事实表含有一个不存在于维度表的源系统键。在这种情况下,我们则想要在维度里创建一个推断成员(Inferred member),也就是说,创建一个新的代理键并把它添加到维度里,在我们从源系统里获得真正的维度行之后再把它替换更新掉。

  下面的演示编码只在SQL Server 2008的二月份社区测试试用版中进行过测试。

  新建一个表类型

  为了把表作为一个参数传递到存储过程或函数中,你首先要创建一个TABLE TYPE,如下所示:

以下为引用的内容:
  CREATETYPESourceKeyListASTABLE(
  SourceKeyNVARCHAR(50)
  )
  GO

  T-SQL编码跟新建一个普通的表的编码非常相似。你可以查询当前数据库的sys.types来确定已创建的任何表类型:

以下为引用的内容:
  SELECTname,system_type_id,user_type_id
  FROMsys.types
  WHEREis_table_type=1

  新建一个带有表值参数的存储过程

  我们要创建一个存储过程,该存储过程执行代理键查找命令,如果源键不存在则添加一个推理成员。首先我们需要新建一个维度表样例:

以下为引用的内容:
  CREATETABLEdbo.dim_Customer(
  sk_CustomerINTIDENTITYNOTNULL,
  CustomerSourceKeyNVARCHAR(50)NOTNULL,
  CustomerNameNVARCHAR(50)NOTNULL,
  InferredMemberBITNOTNULL
  )

  代理键是整数类型,我们使用IDENTITY属性来自动分配插入行的序列号。当我们插入一行源键不存在的行时,InferredMember列设置为1。当我们在维度处理过程中从源系统中获得该行后,它将替换掉推理成员行,而InferredMember列的值会变成0。

分享:如何有效防止Java程序源码被人偷窥?
Java程序的源代码很容易被别人偷看,只要有一个反编译器,任何人都可以分析别人的代码。本文讨论如何在不修改原有程序的情况下,通过加密技术保护源代码。 一、为什么要加密? 对于传统的C或

来源:模板无忧//所属分类:Mssql数据库教程/更新时间:2008-08-22
相关Mssql数据库教程