【问题标题】:Table Value Parameter ReadOnly Work-Around表值参数只读解决方法
【发布时间】:2012-01-06 18:55:34
【问题描述】:

我有一个带有表值参数的 SProc,@section 类型为 dbo.SectionIn。这个参数在整个 SProc 中都被使用,我想从中删除一些记录,但它当然是 ReadOnly 设计的。

The table-valued parameter "@sections" is READONLY and cannot be modified.

我的计划是将其内容复制到一个表变量中,然后使用它。

DECLARE @sectionDups as dbo.SectionIn
    INSERT INTO @sectionDups
    SELECT *
    FROM @sections 

我的问题是这是否会对查询计划造成任何性能影响,如果不会,那么 ReadOnly 要求背后的原因是什么?

【问题讨论】:

    标签: sql-server-2008 table-valued-parameters


    【解决方案1】:

    复制表会影响性能,param table的行数越多,对性能的影响越大,但如果对sp的总运行量可以忽略不计

    AFAIK 使用 readonly tvp 的唯一原因是 - 因为它是 sql server 中非常新鲜的功能,并且读写仍在建设中,所以 - 请耐心等待

    【讨论】:

      【解决方案2】:

      您不应将 TVP 表变量复制到新的表变量中。如果要排除行,请执行以下操作之一:

      1. 使用WHERE 子句过滤掉不需要的行。

        或

      2. 创建一个本地临时表(单个#)并将 TVP 数据复制到该表。虽然这样做似乎需要使用 WHERE 子句,所以这在以下方面没有太大价值:

        • 与表变量相比,临时表的统计数据更好(但使用语句级别 OPTION (RECOMPILE) 可以解决这个问题)
        • 能够添加列
        • 能够修改 TVP 中已有的值

      【讨论】:

        猜你喜欢
        • 2016-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        相关资源
        最近更新 更多