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

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

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

现在我们来创建一个接受新建表类型作为参数并执行代理键查找和推理处理的存储过程:

以下为引用的内容:
  CREATEPROCEDUREdbo.stp_GetCustomerSK
  @source_key_listSourceKeyListREADONLY
  AS
  BEGIN
  INSERTINTOdbo.dim_Customer(
  CustomerSourceKey,CustomerName,InferredMember
  )
  SELECTSourceKey,N'INFERRED',1
  FROM@source_key_listk
  LEFTJOINdbo.dim_CustomercONc.CustomerSourceKey=k.SourceKey
  WHEREsk_CustomerISNULL
  SELECTsk_Customer,CustomerSourceKey
  FROMdbo.dim_Customerc
  JOIN@source_key_listkONk.SourceKey=c.CustomerSourceKey
  END
  GO

  表值参数必须被声明为READONLY。你不能对表值参数执行任何DML(即插入、更新、删除)。你职能在SELECT语句里引用它。存储过程把表值参数与客户维度连接起来,查找出任何还不存在的源键,然后插入这些键。然后存储过程再把表值参数与客户维度连接来返回含有源键及其对应代理键的结果集。

  你可以通过查询sys.parameters来查看任何被声明为READONLY的参数:

以下是引用片段:

以下为引用的内容:
  SELECTobject_id,nameFROMsys.parameters
  WHEREis_readonly=1
  GO

  声明表值参数,导入数据,并把它传递到存储过程里

  你声明一个表类型的T-SQL变量,使用INSERT插入语句向该表导入数据:

以下为引用的内容:
  DECLARE@source_key_listSourceKeyList
  INSERTINTO@source_key_list
  SELECT'CustomerID_001'UNIONALL
  SELECT'CustomerID_002'UNIONALL
  SELECT'CustomerID_003'
  EXECdbo.stp_GetCustomerSK@source_key_list
  GO

  为了演示的目的,上面的SELECt语句只是硬编码一些值来插入;你通常可以从你的源系统表里执行SELECT DISTINCT命令来获得你希望对其执行代理键查找功能的源系统键的列表。

  返回结果显示了每一个源键的代理键。