У меня есть пользовательская функция в 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, который выглядит многообещающе.
От MSDN :
true, если методвызывается, когда в вызове метода указаны входные аргументы null (Nothing в Visual Basic);false, если метод возвращает значение NULL (Nothing в Visual Basic), когда любой из его входных параметров имеет значение NULL (Nothing в Visual Basic).
Звучит в точности так, как я хочу;если я получу ноль, просто пропустите ноль.Я не совсем уверен, как это реализовать, поэтому я снова проверяю 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? Должен ли я делать что-то еще? Есть ли какой-нибудь хороший способ заставить мою функцию передавать нули через