Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQLCLR und DateTime2

Sie müssen die DateTime-Typen in der Signatur Ihrer Funktionsmethode ändern. SQLDateTime wird einer DateTime in der Datenbank zugeordnet.

System.DateTime ist genauer und kann DateTime2 zugeordnet werden (wird aber standardmäßig als DateTime im Deployment-Skript gelöscht).

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

Dann können Sie Ihr Bereitstellungsskript so anpassen, dass es liest.

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

Wenn Sie Ihre Funktion ausführen, sollten Sie jetzt eine genauere Ausgabe erhalten.

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