【问题标题】:SQL CLR and nullable datetime parameterSQL CLR 和可为空的日期时间参数
【发布时间】:2010-05-28 03:49:35
【问题描述】:

我正在尝试编写一个 SQLCLR 函数,该函数将 DateTime2 作为输入并返回另一个 DateTime2。基于此post,我将参数更改为 C# 类型 DateTime,从而为我提供了所需的精度水平。但是,因为输入可以是 null 我希望它是 DateTime?;返回类型也是如此。

using System;
using Microsoft.SqlServer.Server;

namespace SqlServer.Functions {
    public class UserDefinedFunctions {
        [SqlFunction(DataAccess = DataAccessKind.None)]
        public static DateTime? GetLocalTimeFromGMT(DateTime? dateTime) {
            if (dateTime.HasValue)
                return DateTime.SpecifyKind(dateTime.Value, DateTimeKind.Utc).ToLocalTime();
            else
                return (DateTime?)null;
        }
    }
}

问题是我在尝试部署时收到以下错误:

错误 1 ​​找不到类型“Nullable`1”,因为它不存在或您没有权限。 SqlServer.Functions

我使用的是 Sql Server 2008 和 Visual Studio 2008。

【问题讨论】:

    标签: c# .net tsql sql-server-2008 sqlclr


    【解决方案1】:

    很遗憾,Visual Studio 2008 不支持使用 SQL Server 2008 中添加的许多新功能(包括可空类型)部署 SQLCLR 函数。您可以查看 Connect item Bob Beauchemin 提交的关于此问题的信息,该问题已针对 Visual Studio 2010 进行了修复。

    Connect 项中列出了一种解决方法,它向 Visual Studio 表明它可以使用 SQLCLR 中的 System.Core 和 System.Xml.Linq 程序集,这应该适合您。否则,您可以手动将该功能部署到数据库。

    【讨论】:

    • 很遗憾,但缺少的程序集不包含表示 DateTime2 的新类型。我真的很希望能找到一个 SqlDateTime2 类。
    • 不... Visual Studio 2010 Ultimate 仍然无法部署可空类型的函数。如果我摆脱'?它部署得很好,但它不会部署为“日期时间?”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多