表值CLR函数与SQL日期返回类型

时间:2015-12-29 15:16:55

标签: c# sql-server sqlclr

我正在尝试创建一个返回日期表的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查询中转换为日期?

1 个答案:

答案 0 :(得分:1)

system.data.sqltypes中没有SqlDate类型,也没有其他只包含日期的数据类型。这样做的方法是传递一个datetime并在SQL中转换它(如果你真的需要转换为Date)。