所以这是交易。在我们的数据库中,出于安全性和模块化的目的,我们将大部分读取(即选择语句)包装在表值函数中。所以我有一个 TVF,它定义了一个或多个可选参数。
我相信有一个带有默认参数的 TVF 要求在像这样调用 TVF 时使用关键字
default
:
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 吗?
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);
我会这样做的:
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);
}
}
您可以将 Null 作为参数值传递。
这篇文章展示了例子。