1

ストアド プロシージャに渡す必要がある場合とない場合がある 3 つの変数があります。基本的にはすべてのオプションと、それをいくつかの値で分割したオプションに基づいています。誰かがブレークダウンオプションを選択し、すべてのオプションを個別に選択した場合の手順がありますが、GetReportbySV、GetReportbyVEなどを作成する必要があります。これをすべて1つのストアドプロシージャで行う人はいますか?それらの8?

create proc GetReportbySVE
@SCode int,
@VCode int, 
@ECode int
as 
  begin
    select * from D 
    where S =  @SCode and V = @VCode and E = @ECode
end

編集: C# winform を使用して、このプロシージャにデータを渡しています。

4

2 に答える 2

0

さらに多くのパラメーターがあると、かなり難しい場合があります。詳細な調査については、SO に関するこの質問をご覧ください: T-SQL ストアド プロシージャでオプションのパラメーターを使用するにはどうすればよいですか? .

C# の例

このようなシナリオでストアド プロシージャを使用することはありません。代わりに、次のコードを見てください。

var sqlSelect = "Select field1, field2, field3 FROM yourTable"
var cmd = new SqlCommand(yourConn)

var sqlWhere = new StringBuilder();

If (sCode > 0)
{
cmd.Parameters.Add("@SCode", SqlDbType.int).Value = sCode;
sqlWhere.Append("@SCode AND");
}
If (vCode > 0)
{
cmd.Parameters.Add("@VCode ", SqlDbType.int).Value = vCode;
sqlWhere.Append("@VCode AND");
}

If(eCode > 0)
{
cmd.Parameters.Add("@ECode", SqlDbType.int).Value = eCode ;
sqlWhere.Append("@ECode AND");
}

if (sqlWhere.length > 0)
{
 sqlWhere.Insert("WHERE ",0);
}
cmd.CommandText = sqlSelect + sqlWhere.ToString();

using(var sr = SqlDataReader = cmd.ExecuteReader())
{
  //read your fields
}
于 2013-07-12T21:50:40.597 に答える