WEB开发网
开发学院数据库MSSQL Server 在SQL Server 2008中运用表值参数(TVP) 阅读

在SQL Server 2008中运用表值参数(TVP)

 2008-05-27 09:55:33 来源:WEB开发网   
核心提示: 除了简单的查找源系统键的代理键之外,还有一种情况可利用表值参数,在SQL Server 2008中运用表值参数(TVP)(2),即事实表含有一个不存在于维度表的源系统键,在这种情况下,当我们在维度处理过程中从源系统中获得该行后,它将替换掉推理成员行,我们则想要在维度里创建一个推断成员(In

除了简单的查找源系统键的代理键之外,还有一种情况可利用表值参数,即事实表含有一个不存在于维度表的源系统键。在这种情况下,我们则想要在维度里创建一个推断成员(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。

Tags:SQL Server 运用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接