SQL CLR и обнуляемый параметр datetime - PullRequest
3 голосов
/ 27 мая 2010

Я пытаюсь написать функцию SQLCLR, которая принимает DateTime2 в качестве входных данных и возвращает другой DateTime2. Основываясь на этом post , я изменил параметр на DateTime типа C #, что дает мне требуемый уровень точности. Однако, поскольку входные данные могут быть нулевыми, я бы хотел, чтобы это было 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.

1 Ответ

1 голос
/ 27 мая 2010

К сожалению, Visual Studio 2008 не поддерживает развертывание функций SQLCLR со многими новыми функциями, добавленными в SQL Server 2008, включая Nullable Types. Вы можете увидеть элемент Connect Боба Бошемина, поданный по этой проблеме, который был исправлен для Visual Studio 2010.

В элементе Connect указан обходной путь, который указывает Visual Studio, что он может использовать сборки System.Core и System.Xml.Linq в SQLCLR, что должно работать для вас. В противном случае вы можете развернуть функцию в базе данных вручную.

...