频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

在SQL Server 2008中运用表值参数

来源:pcdog 作者:佚名 出处:巧巧读书 2008-04-30 进入讨论组
    
    新建一个带有表值参数的存储过程

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

   

 以下是引用片段:
  CREATE TABLE dbo.dim_Customer (
  sk_Customer INT IDENTITY NOT NULL,
  CustomerSourceKey NVARCHAR(50) NOT NULL,
  CustomerName NVARCHAR(50) NOT NULL,
  InferredMember BIT NOT NULL
  )

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

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

   

 以下是引用片段:
  CREATE PROCEDURE dbo.stp_GetCustomerSK
  @source_key_list SourceKeyList READONLY
  AS
  BEGIN
  INSERT INTO dbo.dim_Customer(
  CustomerSourceKey, CustomerName, InferredMember
  )
  SELECT SourceKey, N'INFERRED', 1
  FROM @source_key_list k
  LEFT JOIN dbo.dim_Customer c ON c.CustomerSourceKey = k.SourceKey
  WHERE sk_Customer IS NULL
  SELECT sk_Customer, CustomerSourceKey
  FROM dbo.dim_Customer c
  JOIN @source_key_list k ON k.SourceKey = c.CustomerSourceKey
  END
  GO

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

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

 以下是引用片段:
  SELECT object_id, name FROM sys.parameters
  WHERE is_readonly = 1
  GO

更多文章 更多内容请看SQL Server 数据处理专题SQL Server 索引和查询专题SQL Server专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章