Debe cambiar los tipos de fecha y hora en la firma de su método de función. SQLDateTime se asigna a DateTime en la base de datos.
System.DateTime es más preciso y puede se asignará a DateTime2 (pero, de forma predeterminada, se eliminará como DateTime en el script de implementación).
[SqlFunction(DataAccess = DataAccessKind.None)]
//OLD Signature public static SqlDateTime UTCToLocalDT(SqlDateTime val)
public static DateTime UTCToLocalDT(DateTime val) {
...
}
Luego puede modificar su secuencia de comandos de implementación para que lea.
CREATE FUNCTION [UTCToLocalDT]
(
@dt [datetime2]
)
RETURNS [datetime2]
AS
EXTERNAL NAME [SQLCLR].[MyCompany.SQLCLR.DateTimeHelpCLR].UTCToLocalDT
GO
Ejecutar su función ahora debería brindarle un resultado más preciso.
DECLARE @input DateTime2, @output DateTime2
SET @input = '2010-04-12 09:53:44.48123456'
SET @output = YourDatabase.dbo.[UTCToLocalDT](@input)
SELECT @input, @output