Использование SQL Server 2008, Visual Studio 2005, .net 2.0 с пакетом обновления 2 (поддерживает новые типы данных SQL Server 2008).
Я пытаюсь написать функцию SQLCLR, которая принимает DateTime2 в качестве входных данных и возвращает другой DateTime2. например :
using System;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
namespace MyCompany.SQLCLR
{
public class DateTimeHelpCLR
{
[SqlFunction(DataAccess = DataAccessKind.None)]
public static SqlDateTime UTCToLocalDT(SqlDateTime val)
{
if (val.IsNull)
return SqlDateTime.Null;
TimeZone tz = System.TimeZone.CurrentTimeZone;
DateTime res = tz.ToLocalTime(val.Value);
return new SqlDateTime(res);
}
}
}
Теперь вышеприведенное компилируется нормально. Я хочу, чтобы эти SqlDateTimes отображались на DateTime2 SQL Server, поэтому я пытаюсь запустить этот T-SQL:
CREATE function hubg.f_UTCToLocalDT
(
@dt DATETIME2
)
returns DATETIME2
AS
EXTERNAL NAME [SQLCLR].[MyCompany.SQLCLR.DateTimeHelpCLR].UTCToLocalDT
GO
Это дает следующую ошибку:
Сообщение 6551, Уровень 16, Состояние 2, Процедура
f_UTCToLocalDT, строка 1 CREATE FUNCTION
для "f_UTCToLocalDT" не удалось, потому что
Типы T-SQL и CLR для возвращаемого значения
не совпадают.
Использование DATETIME (вместо DATETIME2) работает нормально. Но я бы предпочел использовать DATETIME2 для поддержки повышенной точности. Что я делаю не так, или DateTime2 не (полностью) не поддерживается SQLCLR?