Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQLCLR e DateTime2


Você precisa alterar os tipos DateTime na assinatura do seu método de função. SQLDateTime mapeia para um DateTime no banco de dados.

System.DateTime é mais preciso e pode ser mapeado para DateTime2 (mas, por padrão, será descartado como um DateTime no script de implantação).
[SqlFunction(DataAccess = DataAccessKind.None)]
//OLD Signature public static SqlDateTime UTCToLocalDT(SqlDateTime val) 
public static DateTime UTCToLocalDT(DateTime val) {
   ...
}

Em seguida, você pode ajustar seu script de implantação para ler.
CREATE FUNCTION [UTCToLocalDT]
(
    @dt [datetime2]
)
RETURNS [datetime2]
AS
    EXTERNAL NAME [SQLCLR].[MyCompany.SQLCLR.DateTimeHelpCLR].UTCToLocalDT
GO

A execução de sua função agora deve fornecer uma saída mais precisa.
DECLARE @input DateTime2, @output DateTime2
SET @input = '2010-04-12 09:53:44.48123456'
SET @output = YourDatabase.dbo.[UTCToLocalDT](@input)
SELECT @input, @output