表值参数可以是临时的吗

Posted

技术标签:

【中文标题】表值参数可以是临时的吗【英文标题】:Can Table-Valued Parameters be temporary 【发布时间】:2019-03-13 17:15:19 【问题描述】:

我正在尝试创建一个存储过程,它的参数可以采用未知数量的值。为此,我使用了一个可以查询的表值参数。我想知道是否可以让表值参数是临时的,并在执行存储过程后将其删除?我尝试阅读它,但从我发现的内容中没有明确说明答案是“是”还是“否”。

如果我得到任何帮助,我将不胜感激。谢谢!


我使用的是 SQL Server 2016。

我声明如下:

CREATE TYPE [schema].[tvp] AS Table ( value INT NULL)  
 GO  

CREATE PROCEDURE [schema].[procedure] ( 
@Param [tvp] READONLY 
) AS BEGIN ..

【问题讨论】:

我认为这回答了你的问题,***.com/questions/5653520/… 您使用的是什么版本的 SQL Server?如果您使用的是 2016 或更新版本,则可以通过 NVARCHAR 参数将数据作为 JSON 传递。我的团队已经停止使用大部分 TVP 来支持这一点。 如何声明表值参数?您是否将其定义为用户定义的表类型? @MadBert 感谢您的帮助,我会调查一下。 @squillman 我使用的是 2016 年。 【参考方案1】:

表值参数是自动临时的,在存储过程执行后将被删除到 SQL Server 上。在 .net 方面,该参数也将在正常的“垃圾处理”中删除。

【讨论】:

【参考方案2】:

参数是参数——它们只是临时保存值。调用存储过程时适用于 int 或 varchar 参数的内容也适用于 TVP。

【讨论】:

以上是关于表值参数可以是临时的吗的主要内容,如果未能解决你的问题,请参考以下文章

表值参数

从表值函数返回表并在临时表中设置该值

为啥在 SQL 中使用表值函数而不是临时表?

临时表是线程安全的吗?

子查询 X 临时表 X 动态 sql X 表值函数

sql 表表达式 - 视图,临时表,表变量,派生表,表值函数,公用表表达式(CTE)