SQL Server - Обработка нулевого ввода в пользовательской функции CLR (UDF) с помощью OnNullCall

У меня есть определяемая пользователем функция в SQL Server (написанная на .NET), которая очищает текст. Мне интересно, как обрабатывать нулевой ввод.

Вот функция в C #:

[Microsoft.SqlServer.Server.SqlFunction]
public static SqlChars cleanEstActText(SqlChars input)
{
    SqlChars cascadingSqlChar = removeNBSP(input);
    cascadingSqlChar = optimizeFontTags(cascadingSqlChar);

    return cascadingSqlChar;
}

Это ошибка в SQL, если функция получает какие-либо нулевые данные:

A .NET Framework error occurred during execution of user-defined routine or aggregate "removeNBSP": 
System.Data.SqlTypes.SqlNullValueException: Data is Null. This method or property cannot be called on Null values.
System.Data.SqlTypes.SqlNullValueException: 
   at System.Data.SqlTypes.SqlChars.get_Value()
   at UserDefinedFunctions.removeNBSP(SqlChars input)

Чтение на SO и Google привело меня к OnNullCall атрибут, который выглядит многообещающим.

From MSDN :

true, если метод вызывается, когда в вызове метода указаны входные аргументы null (Nothing в Visual Basic); false, если метод возвращает значение null (Nothing в Visual Basic), когда любой из его входных параметров имеет значение NULL (Nothing в Visual Basic).

Звучит в точности так, как я хочу; если я получу null, просто передайте null. Я не совсем уверен, как это реализовать, поэтому снова проверяю MSDN (http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.server. sqlmethodattribute.aspx) и перепишу первую строку моей функции с

[Microsoft.SqlServer.Server.SqlFunction]

на

[Microsoft.SqlServer.Server.SqlMethod(OnNullCall = false, IsMutator = false, InvokeIfReceiverIsNull = false)]

. Если я сделаю это, я получу ошибку в SQL каждый раз, когда использую его:

Cannot find either column "dbo" or the user-defined function or aggregate "dbo.cleanEstActText", or the name is ambiguous.

Я неправильно реализую OnNullCall? Должен ли я делать что-нибудь еще? Есть ли действительно хороший способ заставить мою функцию передавать нули?

7
задан Solomon Rutzky 21 August 2015 в 06:40
поделиться