我正在尝试创建一个返回日期表的CLR(C#)表值函数。
[SqlFunction(
DataAccess = DataAccessKind.Read,
FillRowMethodName = "FindDates_FillRow",
TableDefinition = "ReturnDate date")]
public static IEnumerable BusinessDays(SqlDateTime startDate, SqlDateTime endDate)
{
//function body
}
public static void FindDates_FillRow(
object resultObj,
out SqlDateTime returnDate)
{
dayResult result = (dayResult)resultObj;
returnDate = result.Date;
}
上面的代码导致错误,因为SqlDateTime类型在FillRow上创建的方法签名与SQL Server在给定TableDefinition属性时的预期不同。
SQL72014:.Net SqlClient数据提供程序:消息6258,级别16,状态1, 过程BusinessDays,第1行“FillRow”方法的功能签名 (由SqlFunctionAttribute.FillRowMethodName指定)不会 匹配表值CLR函数'BusinessDays'到期的SQL声明 第1栏。
如果我将TableDefinition更改为datetime类型,一切正常,但由于没有SqlDate类型,我该如何返回日期类型?这甚至是可能的还是我只需要在CLR端使用datetime并在我的SQL查询中转换为日期?
答案 0 :(得分:1)
system.data.sqltypes中没有SqlDate类型,也没有其他只包含日期的数据类型。这样做的方法是传递一个datetime并在SQL中转换它(如果你真的需要转换为Date)。