SQLCLR and DateTime2

前端 未结 2 1944
孤街浪徒
孤街浪徒 2021-01-05 07:30

Using SQL Server 2008, Visual Studio 2005, .net 2.0 with SP2 (has support for new SQL Server 2008 data types).

I\'m trying to write an SQLCLR function that takes a D

相关标签:
2条回答
  • 2021-01-05 07:53

    Note that using "DateTime?" still always gives build errors (even in VS 2013 with sql 2012), though apparently the result is usable if one selects "build, deploy" and then uses the files in the obj folder, editing the generated.sql file in the sql query window (to use DateTime2 as parameter) before executing to add it to Sql Server.
    The build error is "SQL46010: Incorrect syntax near )." in \obj\Debug\YourPrjName.generated.sql

    (Would post above as comment if I could.)

    0 讨论(0)
  • 2021-01-05 07:57

    You need to change the DateTime types in the signature of your Function Method. SQLDateTime maps to a DateTime on the database.

    System.DateTime is more precise and can be mapped to DateTime2 (but by default, it'll be dropped as a DateTime in the deploy script).

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

    Then you can tweak your deploy script to read.

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

    Running your function should now give you more precise output.

    DECLARE @input DateTime2, @output DateTime2
    SET @input = '2010-04-12 09:53:44.48123456'
    SET @output = YourDatabase.dbo.[UTCToLocalDT](@input)
    SELECT @input, @output
    
    0 讨论(0)
提交回复
热议问题