所以这是交易。在我们的数据库中,出于安全性和模块化的目的,我们将大多数读取(即select语句)包装在表值函数中。因此,我有一个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);

关于ado.net - 如何在ADO.NET中为表值函数调用传递默认关键字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1835935/

10-11 04:49