タグ付けされた質問 「table-valued-parameters」

2
TVPを読み取り専用にする必要がある理由、および他のタイプのパラメーターを読み取り専用にできない理由
このブログによると、関数またはストアドプロシージャの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をパラメーターにしたくないことに関連していますか?

2
nullまたは空のテーブル値パラメーターを確認するにはどうすればよいですか?
ストアドプロシージャ(SS2k8)があり、テーブル値パラメーターがいくつかあり、それらがnullまたは空になる場合があります。このStackOverflowの投稿を見たところ、null /空のTVPは呼び出しパラメーターリストから単に削除する必要があると述べています。私の問題は、「IF(@tvp IS NULL)」がプロシージャの作成に失敗し、「スカラー変数「@tvpを宣言する必要があります」というメッセージが表示されるため、ストアドプロシージャ内の空またはnullを確認する方法を理解できないことです。TVPでSELECT COUNT(*)を実行してゼロを確認する必要がありますか? コードの抜粋: CREATE PROCEDURE [foo] (@tvp [TvpType] READONLY) AS IF (@tvp IS NOT NULL) -- doesn't work BEGIN -- lots of expensive processing END ELSE BEGIN -- a little bit of cheap processing END ...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.