如何在ADO.NET中为表值函数调用传递default关键字

时间:2009-12-02 21:28:07

标签: ado.net user-defined-functions sqlparameters

所以这是交易。在我们的数据库中,为了安全性和模块性,我们将大部分读取(即select语句)包装在表值函数中。所以我有一个定义一个或多个可选参数的TVF。

我认为拥有默认参数的TVF要求在调用TVF时使用关键字default,如下所示:

select * from fn_SampleTVF(123, DEFAULT, DEFAULT)

没关系,一切都在查询分析器中工作,但是当实际从ADO.NET发出这个请求的时候,我不知道如何创建一个实际将单词default放入的sql参数渲染的sql。

我现在有类似的东西:

String qry = "select * from fn_SampleTVF(@requiredParam, @optionalParam)";

DbCommand command = this.CreateStoreCommand(qry, CommandType.Text);

SqlParameter someRequiredParam = new SqlParameter("@requiredParam", SqlDbType.Int);
someRequiredParam.Value = 123;
command.Parameters.Add(someRequiredParam);

SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
optionalParam.Value = >>>> WTF? <<<<
command.Parameters.Add(optionalParam);

那么,有人知道如何将default传递给TVF吗?

3 个答案:

答案 0 :(得分:3)

SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
optionalParam.Value = >>>> WTF? <<<<
command.Parameters.Add(optionalParam);

默认情况下,您不必添加上述代码(可选参数)。 SQL Server将使用UDF中定义的默认值。但是,如果您想传递不同的值,则可以传递:

SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int); 
optionalParam.Value = newValue; 
command.Parameters.Add(optionalParam); 

答案 1 :(得分:1)

我会这样做的:

public void YourMethod(int rparam, int? oparam = null)
{
    String qry = string.Format("select * from fn_SampleTVF(@requiredParam, {0})"
        , !oparam.HasValue ? "default" : "@optionalParam");

    SqlParameter someRequiredParam = new SqlParameter("@requiredParam", SqlDbType.Int);
    someRequiredParam.Value = rparam;
    command.Parameters.Add(someRequiredParam);

    if (oparam.HasValue)
    {
        SqlParameter optionalParam = new SqlParameter("@optionalParam", SqlDbType.Int);
        optionalParam.Value = oparam.Value;
        command.Parameters.Add(optionalParam);
    }
}

答案 2 :(得分:0)

您可以传递Null作为参数值。

本文展示了示例:http://support.microsoft.com/kb/321902