5

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

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

select * from fn_SampleTVF(123, DEFAULT, DEFAULT)

没关系,一切都在查询分析器中运行,但是当实际从 ADO.NET 发出这个请求时,我不确定如何创建一个 sql 参数,该参数实际上将单词default放入呈现的 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 吗?

4

3 回答 3

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); 
于 2010-11-01T08:41:54.683 回答
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);
    }
}
于 2012-12-06T06:39:41.900 回答
0

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

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

于 2009-12-02T21:39:07.117 回答