我正在尝试测试SQL Server 2012中CLR函数的功能.我在网上找到了一个关于如何基本执行此操作的教程,并让它在我的服务器上运行.(
https://www.skylinetechnologies.com/Blog/Skyline-Blog/March-2013/CLR-Functions-in-SQL-Server-A-Tutorial)
现在,我想创建一个不返回表而是返回字符串的函数.根据我的理解,SQL Server需要某种对象来使用,所以我尝试使用以下测试方法:
public static class TestSingleValue
{
[SqlFunction(DataAccess = DataAccessKind.None, FillRowMethodName = "MyFillRowMethod", IsDeterministic = true)]
public static SqlChars Test123()
{
SqlChars test = new SqlChars("teststring");
return test;
}
}
在SQL服务器上,我执行了以下操作:
ALTER ASSEMBLY ClassLibrary2 from 'D:\SQL\TestCLR\ClassLibrary2.dll' with Permission_set = SAFE
CREATE FUNCTION TestCLR()
returns nvarchar(max)
AS
EXTERNAL name ClassLibrary2.[CLRTest.TestSingleValue].Test123
GO
Execute TestCLR
SQL Server在执行测试方法时抛出错误,称“对象引用未设置为对象的实例”,并进一步:
System.NullReferenceException:
System.Data.SqlServer.Internal.ClrLevelContext.GetCurrentContextForLobAccess(>>CClrLobContext* pLobContext)
System.Data.SqlServer.Internal.ClrLevelContext.GetXvarWlobStream(CXVariantBasepxvarSource, XvarLOBStreamInitCode eCode, Int64 lcid, SqlCompareOptions compareOpts, CClrLobContext pLobContext).
任何人都可以告诉我在哪里我的概念错了或者可能提供一个好教程的链接?直到现在我都找不到一个.提前致谢.
最佳答案 好吧,我自己找到了答案,问题是“nvarchar(max)”作为返回类型.你必须为nvarchar定义一个长度或使用一个变通方法,然后它工作得很好.
相关:
How to create CLR stored procedure with Nvarchar(max) parameter?