根据此博客,如果函数或存储过程的OUTPUT
参数不是参数,则它们本质上是按值传递的;如果它们是参数,则本质上应视为传递引用的更安全的版本OUTPUT
。
最初,我认为强制声明TVP的目的READONLY
是向开发人员明确表示不能将TVP用作OUTPUT
参数,但由于我们无法将非TVP声明为,因此还必须继续进行下去READONLY
。例如,以下失败:
create procedure [dbo].[test]
@a int readonly
as
select @a
消息346,级别15,状态1,过程测试
参数“ @a”不是表值参数,因此不能声明为READONLY。
- 由于统计数据未存储在TVP上,因此阻止DML操作的原理是什么?
- 是否与
OUTPUT
出于某些原因不希望TVP成为参数有关?
TYPE
变量还是DECLARE x as TABLE (...)
)?set @tvp = myfunction(@tvp)
如果我的函数的RETURNS
值是与TVP类型具有相同DDL的表,是否可以使用函数代替函数(尽管占用的内存更大)?