T-SQL、SQL Server Management Studio 15.0.18131.0
検証する必要のある一連のテーブルがあります。これらはすべて類似した列を持っています-完全に同じではありませんが、それらを読み取ると、同じ情報を推測できます。ただし、これらの各テーブルには、検証に異なるロジックを使用する列がわずかに多かれ少なかれあります。例えば:
表B = [ColA、ColY、ColC]
テーブルAを検証します。列AとCを使用しますが、Bも重要と見なします。
SQLの経験が限られているので、いくつかの選択肢があります。
検証するテーブルごとにストアドプロシージャを作成します
1つのストアドプロシージャで、各テーブルと各検証ロジックタイプの検証クエリを作成します
1つのストアドプロシージャで、検証クエリを文字列の断片(動的SQLの場合)に分割し、各テーブルに必要なロジックに基づいて各検証クエリをまとめます。
現在、#3のようなことをしています。
DECLARE @PartA ....
DECLARE @PartB ....
DECLARE @Validate = @PartA + @PartB
EXEC @Validate
これは主に、クエリを実行する代わりに、デバッグフラグを渡したときに実行されるクエリを出力できるようにするために行われます。
しかし、私の現在のシナリオでは、6つの検証を含む5つのテーブルがあり、2つの異なるロジックシナリオがあります(2つのテーブルは他の3つとは少し異なります)。これは少しおかしなことになります。5つのソーステーブル変数、5つの宛先テーブル変数、11のステートメント変数、およびその他の小さな変数がたくさんあるからです。
クエリは次のようになります。
SET @ValidateQuery1 = @Validate1 + @Validate2 + @Validate4 + @Validate5 + ' COUNT(PlanningCategoryKey) KeyCount FROM (' + @Validate3 + @Validate5 + @Validate6 + @Table1 + @Validate7 + ')A' + @Validate8 + @Validate9
今、私はSQLの経験があまりありませんが、これを達成するためのより良い方法があるかどうか疑問に思っています。
2つの質問があります:
クエリを実行する代わりに印刷する組み込みまたは効率的な方法はありますか?SSMSには「結果にクエリを含める」オプションがありますが、これもクエリを実行します。クエリを文字列として入力し、現在のように出力せずにこれを行う方法を示す特定の結果は見つかりませんでした。
そのようなシナリオのための設計原則、ガイドライン、または一般的なコンセンサス設計はありますか?検証を簡単に実行できるようにソーステーブルの標準化に取り組んでいますが、これらは外部データソースからのものであるため、直接制御することはできません。
お手数をおかけしますが、よろしくお願いいたします。
テーブルごとに1つの検証を作成します。データとルールは明らかに同じではないのに、なぜそれらをそのように扱うのですか?同様のサブ検証がある場合は、手続き型言語と同じ関数を記述し、それをクエリ/手続きに組み込むことができます。
これを行うと、動的SQLとは異なり、クエリがどうなるかがわかっているため、クエリを出力する理由が少なくなります。
別のアプローチは、すべてのソーステーブルを標準テーブルにプッシュし、それに検証を適用することです。データと状況を知らなければ、それが良いか悪いかを知るのは難しいですが。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加