2017-12-04 3 views
0

私はまだそれほど新しいですが、次のステップを実行する準備ができています。私は可能な限り、一度に複数のクエリを実行しようとしています。他のいくつかの質問を読むことから、ストアドプロシージャを作成するのが最善のルートであるように見えます。SQL Server Management Studioでストアドプロシージャを作成しました

36個のレポートが作成されています。この場合、一度に36のレポートをすべて作成し、その結果を持たないことが1つの連続したエンティティになることを望みます。それぞれは、以下に示すコードと非常によく似たクエリを使用します。以下に示すクエリは、36のうち最初に作成されるレポートです.36の唯一の違いは、WHEREステートメントの値です。 36個のコードをSQLにコピーアンドペーストし、その結果をコピーしてExcelのスプレッドシートに貼り付けることを防ぐ操作やメソッドが必要です。

私の質問は1です。これはできますか? 2.ストアドプロシージャはこのタスクに最も適した方法ですか?

SELECT 
    '000000' AS area, 
    [SizeClass], 
    COUNT(*) AS [Number of Worksites], 
    SUM(Employment) AS [Employment In Size Class] 
FROM 
    dbo.sizeclassreport 
WHERE 
    code LIKE '11%' OR code LIKE '21%' 
GROUP BY 
    [SizeClass] 
ORDER BY 
    [SizeClass] 
+1

ストアドプロシージャは作業に適しています。 – Spider

答えて

2

WHERE句は、別の列が含まれている場合、彼らはまた、ワイルドカードを持っている場合は、あなたが話している36回のレポートはまた、異なる引数の数を渡すと場合はトリッキー取得します。私はおそらく最大のsprocを書くだろう。レポートのパラメータ数は、最大3の場合、次のようになります。

CREATE PROCEDURE dbo.sp_Test 
    @code1 varchar(80), 
    @code2 varchar(80), 
    @code3 varchar(80) 
AS 
BEGIN 
    IF(@code1 is null or @code1 = '') 
    BEGIN 
     RAISERROR('bad arguments!',16,1); 
     RETURN; 
    END 
    select 
     [cols] 
    from 
     dbo.tbl 
    where 
     ([Code] like @code1) OR 
     (@code2 is NOT null AND [Code] like @code2) OR 
     (@code3 is NOT null AND [Code] like @code3) 
END 

少なくともcode1は常に予想され、残りはオプションです。 where句にレポートに応じて異なる列が含まれる場合、異なる検索に対応するために上記と同様のアプローチで複数のsprocsを実行することをお勧めします。

+0

ありがとうございました。それぞれはWhereステートメントまでまったく同じです。それは、同じような要素にあり、変化する同様の要素の数だけである。 –

関連する問題