我有一个带有表值参数的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要求背后的原因是什么?
答案 0 :(得分:0)
由于复制表会导致性能下降,param表中的行越多,它对性能的影响越大,但是如果它对sp的总运行可以忽略不计
AFAIK只读tvp的唯一原因是 - 因为它在sql server中非常新鲜,而且读写仍在建设中,所以 - 耐心等待
答案 1 :(得分:0)
您不应将TVP表变量复制到新的表变量。如果要排除行,请执行以下操作之一:
使用WHERE
子句过滤掉不需要的行。
或
创建一个本地临时表(单#
)并将TVP数据复制到该表。虽然这样做似乎需要使用WHERE子句,所以这里没有很多值:
OPTION (RECOMPILE)
解决了一个问题)