質問: 複数の変数を設定するSQL Server 私は、7つの異なるストアドプロシージャをいくつかのパラメータを取り、7つの異なるテーブルにデータを挿入します。 私は現在、これらの7つのプロシージャを必要なすべてのデータとともに実行するためのメインのストアドプロシージャを作成しています。必要なデータはすべて1つのテーブル(CommonImpまたはt)です。 このメインストアドプロシージャで必要なすべてのパラメータを取るべきですか? または これらの7つのテーブルに挿入する必要がある行のIDのみを取り込み、テーブルから直接データを取得します。 I think the second option is best. BUT, how do I set all the variables in the main stまたはed procedure to all of the data from the (CommonImpまたはt) table? Essentially, how do I set a bunch of declared variables to the values from a specific row in the CommonImpまたはt table? ありがとう
回答: **IDを渡す:** ここでの利点は、ストアドプロシージャへのすべてのインターフェイスを単純化することです。 これにより、コード化が容易になります。スパイラルな場所からSPを呼び出すと、いくつかのパラメータをロードして渡すのではなく、単一のパラメータを使用するだけで済みます。 **`n` 変数を渡す:** そして、あなたのストアドプロシージャを保持テーブルから「切り離す」という利点があります。 つまり、テーブルにデータを格納せずに、ストアドプロシージャを直接呼び出すことができます。これは、将来的に、データが新しい方法で到着した場合、または単体テストなどのために役立つ可能性があります。 **どちらが最適です:** 私はこれにまっすぐ答えがあるとは思わない、それは好みと意見のより多くのケースだ。 私の意見は、密接に結びついていないものが少ないほどよいということです。それは変化に直面してより柔軟です。 私のやり方は以下の通りです... ``` CREATE PROCEDURE main_by_variable @v1 INT, @v2 INT, ... BEGIN EXEC sub_part_1 @v1, @v3 EXEC sub_part_2 @v2 EXEC sub_part_3 @v2, @v3 ... END CREATE PROCEDURE main_by_id @id INT AS BEGIN DECLARE @v1 INT, @v2 INT, ... SELECT @v1 = field1, @v2 = field2 FROM holding_table WHERE id = @id EXEC main_by_variable @v1, @v2, ... END GO; ``` `main_by_variable` プロシージャを持つことで、実際にデータを保持テーブルに入力することなく、すべてのサブプロシージャをテストするなどの柔軟性が得られます。そしてその柔軟性もサブ手続きの一部です。 しかし、便宜上、 `main_by_id` を使用するほうがきれいです。これはmain_by_variableを包むラッパーであるため、処理中の単一ステップをカプセル化するだけです(テーブルからデータを取り出す)。 また、データ収集部分の周りにトランザクションを配置し、そのデータをテーブルから削除することもできます。または他の多くのオプション。柔軟性があり、柔軟性があります。