このブログによると、関数またはストアドプロシージャのOUTPUTパラメーターは、パラメーターでない場合は本質的に値渡しであり、パラメーターである場合は本質的に参照渡しの安全なバージョンとして扱われOUTPUTます。
最初は、TVPの宣言を強制する目標は、TVPをパラメーターREADONLYとして使用できないことを開発者に明確に知らせることであると考えましたが、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のテーブルである場合、代わりに関数を使用して、メモリフットプリントが大きくても、それを行うことはできますか?