gpt4 book ai didi

sql-server - SQL Server -- 使用 OnNullCall 处理 CLR 用户定义函数 (UDF) 中的空输入

转载 作者:行者123 更新时间:2023-12-02 14:37:40 25 4
gpt4 key购买 nike

我在 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 if the method is called when null (Nothing in Visual Basic) input arguments are specified in the method invocation; false if the method returns a null (Nothing in Visual Basic) value when any of its input parameters are null (Nothing in 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?我应该做点别的事吗?真的有什么好方法让我的函数传递空值吗?

最佳答案

你可以试试这个

[Microsoft.SqlServer.Server.SqlFunction]
public static SqlChars cleanEstActText(SqlChars input)
{

if (input.IsNull) return null;

SqlChars cascadingSqlChar = removeNBSP(input);
cascadingSqlChar = optimizeFontTags(cascadingSqlChar);

return cascadingSqlChar;
}

所有可为空的 SqlData 类型都有 IsNull 属性。

谢谢哈里

关于sql-server - SQL Server -- 使用 OnNullCall 处理 CLR 用户定义函数 (UDF) 中的空输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4541886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com