Bạn cần thay đổi các kiểu DateTime trong chữ ký của Phương thức hàm của bạn. SQLDateTime ánh xạ tới DateTime trên cơ sở dữ liệu.
System.DateTime chính xác hơn và có thể được ánh xạ tới DateTime2 (nhưng theo mặc định, nó sẽ bị loại bỏ dưới dạng DateTime trong tập lệnh triển khai).
[SqlFunction(DataAccess = DataAccessKind.None)]
//OLD Signature public static SqlDateTime UTCToLocalDT(SqlDateTime val)
public static DateTime UTCToLocalDT(DateTime val) {
...
}
Sau đó, bạn có thể điều chỉnh tập lệnh triển khai của mình để đọc.
CREATE FUNCTION [UTCToLocalDT]
(
@dt [datetime2]
)
RETURNS [datetime2]
AS
EXTERNAL NAME [SQLCLR].[MyCompany.SQLCLR.DateTimeHelpCLR].UTCToLocalDT
GO
Việc chạy chức năng của bạn bây giờ sẽ cung cấp cho bạn kết quả chính xác hơn.
DECLARE @input DateTime2, @output DateTime2
SET @input = '2010-04-12 09:53:44.48123456'
SET @output = YourDatabase.dbo.[UTCToLocalDT](@input)
SELECT @input, @output