存储过程中存储的多个变量

时间:2013-07-12 21:40:53

标签: c# sql stored-procedures

我有三个变量可能需要或可能不需要传递给存储过程,基本上是一个所有选项,然后通过将它分解为几个值来选择。我有这个程序,如果有人选择分解选项并单独选择所有选项但我必须制作一个GetReportbySV,GetReportbyVE等。有没有人在一个存储过程中做到这一点我会更好其中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将数据传递给此过程。

2 个答案:

答案 0 :(得分:0)

如果您有更多参数,可能会非常困难。 请在SO上查看此问题以便进一步调查: How can I use optional parameters in a T-SQL stored procedure?

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
}

答案 1 :(得分:0)

存储过程

我建议你使用我的其他答案。但是,这里还有一个存储过程示例。

无论如何,以下程序说明了它的外观(仅为两个参数,给你一个想法):

CREATE PROCEDURE GetReportbySVE
@SCode int,
@VCode int
AS

/* check for the NULL / default value (indicating nothing was passed */
if (@SCode = 0 AND @VCode = 0)
BEGIN
    /* your sql to execute*/
END
if (@VCode = 0)
BEGIN
    /* your sql to execute*/
END
if (@SCode = 0)
BEGIN
    /* your sql to execute*/
END
if (@SCode <> 0 AND @VCode <> 0)
BEGIN
    /* your sql to execute*/
END