このブログによると、関数またはストアドプロシージャの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のテーブルである場合、代わりに関数を使用して、メモリフットプリントが大きくても、それを行うことはできますか?