2
为什么TVP必须是READONLY,为什么其他类型的参数不能是READONLY
根据此博客,如果函数或存储过程的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成为参数有关?