在SQL Server 2008中运用表值参数(TVP)
2008-05-27 09:55:33 来源:WEB开发网除了简单的查找源系统键的代理键之外,还有一种情况可利用表值参数,即事实表含有一个不存在于维度表的源系统键。在这种情况下,我们则想要在维度里创建一个推断成员(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。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接