Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQLCLR et DateHeure2

Vous devez modifier les types DateTime dans la signature de votre méthode de fonction. SQLDateTime correspond à un DateTime sur la base de données.

System.DateTime est plus précis et peut être mappé sur DateTime2 (mais par défaut, il sera supprimé en tant que DateTime dans le script de déploiement).

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

Ensuite, vous pouvez modifier votre script de déploiement pour le lire.

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

L'exécution de votre fonction devrait maintenant vous donner une sortie plus précise.

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