相关疑难解决方法(0)

为什么 TVP 必须是 READONLY,为什么其他类型的参数不能是 READONLY

根据此博客,函数或存储过程的参数如果不是OUTPUT参数,则本质上是按值传递的,如果它们是参数,则基本上被视为按引用传递的更安全版本OUTPUT

起初我认为强制声明 TVP 的目的READONLY是向开发人员明确表示 TVP 不能用作OUTPUT参数,但必须有更多的进展,因为我们不能将非 TVP 声明为READONLY. 例如以下失败:

create procedure [dbo].[test]
@a int readonly
as
    select @a
Run Code Online (Sandbox Code Playgroud)

消息 346,级别 15,状态 1,过程测试
参数“@a”不能声明为 READONLY,因为它不是表值参数。

  1. 由于统计信息未存储在 TVP 上,因此阻止 DML 操作的基本原理是什么?
  2. 是否与OUTPUT出于某种原因不希望 TVP 成为参数有关?

sql-server parameter table-variable table-valued-parameters

21
推荐指数
2
解决办法
1万
查看次数