2017-02-20 10 views
1

ああ、偉大なSQLの専門家、私は以下のシナリオがあります。私は同じ選択、複数回行う必要があると唯一のパラメータ(S)は、それぞれの時間を変更し、例:次を実行します同じSQLを実行複数のパラメータを指定

DECLARE @company1 varchar(25) 
set @company1 = AA 

Select * from sales where Company_Name = @company1 

set @company1 = BB 
新しいのparamaterを宣言します

とループバックしてクエリを実行します。

これは、いくつかの企業にとって可能性があり、実行ごとにいくつかのパラメータがある可能性があります。 私がしたいのは、クエリを一度指定して、一番上に@companyX宣言を追加することだけです。

おかげ

+0

どのようにパラメータに異なる値が設定されていますか?あなたはあなたの全体の手順を示すことができますか? –

答えて

0

データはので、ここでのパラメータまたはクエリに提供される方法の文脈上の問​​題にはほとんど情報があり、いくつかのオプションがあります。

は、複数回のストアドプロシージャを作成し、それを呼び出す:

-- Stored procedure 
create procedure dbo.GetSalesByCompany 
@companyName varchar(25) 

AS 

SET NOCOUNT ON; 
Select * from sales where Company_Name = @company1; 

--Usage 
exec dbo.GetSalesByCompany 'AA'; 
exec dbo.GetSalesByCompany 'BB'; 

-- Usage with params 
DECLARE @company1 varchar(25) 
set @company1 = 'AA'; 
exec dbo.GetSalesByCompany @company1; 
set @company1 = 'BB'; 
exec dbo.GetSalesByCompany @company1; 

ユーザ定義のテーブル値関数を作成します。必要であれば、これは、ストアド・プロシージャから呼び出すことができます。

-- User defined table-valued function 
Create Function dbo.udf_GetSalesByCompany 
(@companyName varchar(25)) 

RETURNS TABLE AS 
RETURN Select * from sales where Company_Name = @company1; 

--Usage 
SELECT * FROM dbo.udf_GetSalesByCompany('AA'); 
SELECT * FROM dbo.udf_GetSalesByCompany('BB'); 

-- Usage with params 
DECLARE @company1 varchar(25) 
set @company1 = 'AA'; 
SELECT * FROM dbo.udf_GetSalesByCompany(@company1); 
set @company1 = 'BB'; 
SELECT * FROM dbo.udf_GetSalesByCompany(@company1); 

それとも文は、この場合には、複数のフィルタ値のため、一度クエリを呼び出すために取得するには、会社名「IN」。

--Use and "IN" statement 
Select * from sales where Company_Name IN('AA', 'BB') 
関連する問題