Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQLCLR e DateTime2

È necessario modificare i tipi DateTime nella firma del metodo Function. SQLDateTime esegue il mapping a un DateTime nel database.

System.DateTime è più preciso e può essere mappato su DateTime2 (ma per impostazione predefinita, verrà eliminato come DateTime nello script di distribuzione).

[SqlFunction(DataAccess = DataAccessKind.None)]
//OLD Signature public static SqlDateTime UTCToLocalDT(SqlDateTime val) 
public static DateTime UTCToLocalDT(DateTime val) {
   ...
}

Quindi puoi modificare lo script di distribuzione per leggerlo.

CREATE FUNCTION [UTCToLocalDT]
(
    @dt [datetime2]
)
RETURNS [datetime2]
AS
    EXTERNAL NAME [SQLCLR].[MyCompany.SQLCLR.DateTimeHelpCLR].UTCToLocalDT
GO

L'esecuzione della tua funzione dovrebbe ora darti un output più preciso.

DECLARE @input DateTime2, @output DateTime2
SET @input = '2010-04-12 09:53:44.48123456'
SET @output = YourDatabase.dbo.[UTCToLocalDT](@input)
SELECT @input, @output