関数メソッドの署名で DateTime 型を変更する必要があります。 SQLDateTime はデータベースの DateTime にマップされます。
System.DateTime はより正確で、できます DateTime2 にマップされます (ただし、デフォルトでは、デプロイ スクリプトで DateTime としてドロップされます)。
[SqlFunction(DataAccess = DataAccessKind.None)]
//OLD Signature public static SqlDateTime UTCToLocalDT(SqlDateTime val)
public static DateTime UTCToLocalDT(DateTime val) {
...
}
次に、デプロイ スクリプトを微調整して読み取ることができます。
CREATE FUNCTION [UTCToLocalDT]
(
@dt [datetime2]
)
RETURNS [datetime2]
AS
EXTERNAL NAME [SQLCLR].[MyCompany.SQLCLR.DateTimeHelpCLR].UTCToLocalDT
GO
関数を実行すると、より正確な出力が得られるはずです。
DECLARE @input DateTime2, @output DateTime2
SET @input = '2010-04-12 09:53:44.48123456'
SET @output = YourDatabase.dbo.[UTCToLocalDT](@input)
SELECT @input, @output