この質問が少し漠然としている場合は、事前にお詫び申し上げます。構文の問題ではなく、概念的な問題であると確信しています。
私はMSSQL
(SQL Server 2008)を使用しており、ユーザー定義テーブルタイプのテーブル値パラメーターを取るストアドプロシージャがあります(DataTableを渡す.NETコードによって呼び出されています)。
私が直面している問題は次のとおりです。
そのテーブル変数のデータを操作する必要がありますが、変数自体は READONLY です (そして、私が理解していることから、ストアド プロシージャに渡すために必要です。ユーザー定義のテーブル タイプ)。
宛先テーブルへの最終的な挿入を行う前@TVP
に、テーブルからすべてを選択して #temp を操作するという明白な解決策を検討しました。#temp
ただし、複数のストアド プロシージャを呼び出してデータを操作できるようにしたいと考えています。これは、呼び出し元と呼び出し先の間でテーブル変数をやり取りすることを意味します。実行する必要があるデータ操作の量は膨大であるため、複数のストアド プロシージャに分割しようとしています。私が知る限り、TVP は READONLY として装飾する必要があり、#temp
テーブルをパラメータとしてストアド プロシージャに渡すことはできないため、これは不可能です。グローバルの使用を検討しました##temp
ただし、このプロシージャは異なるデータ セットで同時に複数回呼び出すことができます (一時的な物理テーブルに選択しない理由でもあります)。
概念的に、ここに欠けているものはありますか? これを達成するための最良の方法は何ですか?私はそれを単一の巨大なストアド プロシージャにしたいと思っていますが、より保守しやすくするためにはしたくありません。
要点をまとめると:
私は P_CALLER、P_CALLEE_1、および P_CALLEE_2 を持っています (明らかに本名ではありません)。
P_CALLER は @SomeTable を TVP として受け取ります。
P_CALLER は、@SomeTable を P_CALLEE_1 に渡してデータを操作する必要があります。その後、修正された結果を P_CALLER に戻します。
P_CALLER は同じことを行い、今度は P_CALLEE_2 を呼び出します。P_CALLEE_2 もそれを返します。
P_CALLER は、DestinationTable への最終的な挿入を行います。
答えを見つけるためにグーグルを試しましたが、見つけた結果のどれも状況に完全に一致していないようです. アドバイスをいただければ幸いです。