複数の変数を設定する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?

ありがとう

2

2 答え

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を包むラッパーであるため、処理中の単一ステップをカプセル化するだけです(テーブルからデータを取り出す)。

また、データ収集部分の周りにトランザクションを配置し、そのデータをテーブルから削除することもできます。または他の多くのオプション。柔軟性があり、柔軟性があります。

2
追加された

すべての変数をパラメータとして受け入れ、それらのデフォルト値を定義することをお勧めします。そのため、SPユーザーは単一のIDパラメータを使用することも、他のパラメータとして直接使用することもできます

CREATE PROCEDURE MainSP
  @ID int,
  @CustomParameter  varchar(10) = NULL,
  @CustomParameter1 DateTime = NULL,
  ...

このようにして、SPはかなりフレキシブルになります

2
追加された
CommonImportテーブルは単なる保持テーブルです。 SPに入る唯一の変数値は、CommonImportテーブルの値です。
追加された 著者 ediblecode,
私はCSVファイルからインポートを取ります。各行はチェックされ、検証され、CommonImportテーブルに入れられます。このデータは、ライブシステムにインポートされます。特に、7つの異なるテーブル(プロパティ、預金、家主、テナントなど)がインポートされます。したがって、CommonImportテーブルから関連情報を取得し、ライブの関連テーブルに挿入する7つのプロシージャがあります。また、このSPはCommonImportがデータのソースではない他のプロジェクトでも使用される可能性があるため、パラメータを使用する方が最適でした。だから、ありがとう
追加された 著者 ediblecode,
なぜ、単一のテーブルで作業するには7つの別々の手順が必要ですか?彼らは何をやってるの?
追加された 著者 sll,