首次尝试CLR集成,因此我可以使用Regex工具。
我创建了程序集:
https://example.com/hello
这样成功,程序集出现在SELECT @ FROM sys.assemblies。
中但没有记录返回SELECT * FROM sys.Assembly_modules。
当我尝试CREATE FUNCTION来调用其中一个方法时,
CREATE ASSEMBLY SQLRegexTools
FROM 'D:\CODE\SQLRegexTools\SQLRegexTools\bin\Release\SQLRegexTools.dll'
我收到错误消息'Msg 6505,在程序集'SQLRegexTools中找不到类型“函数”。
VB模块的类名是“Functions”。为什么这会在错误中被称为类型,为什么我在模块中看不到任何内容?
答案 0 :(得分:1)
当SQL Server无法解析提供的名称时,会发生此错误。请尝试下面的代码段,看看这是否可以解决问题。
CREATE FUNCTION RegExMatch(@pattern varchar(max)
, @SearchIn varchar(max)
, @options int)
RETURNS varchar
AS EXTERNAL NAME SQLRegexTools.[Functions].RegExMatch
用于访问本机代码的各个函数/方法的解析与多部分对象名称(例如类型)相比无法区分。
另外需要注意的是,使用嵌套命名空间的本机代码必须完全限定同一对引号中的嵌套命名空间。例如,如果RegExMatch
位于SQLRegexTools.A.B.C.RegExMatch
,则在SQL Server中将SQLRegexTools.[A.B.C].RegExMatch
与EXTERNAL NAME
一起使用时,会将其引用为${bool:ifElse('a','b')}
。
答案 1 :(得分:0)
这就是Joey的答案。谢谢。
在这个过程中,我经过多次调查和测试后学到了很多问题。他们经常被埋在关于整个过程的长篇文章中,我将在此总结:
示例:
1 2 3 4
[SQLRegexToolsASM]。[SQLRegexToolsNS.RegexFunctionsClass] .RegExMatch
组件。[rootnamespace.namespace.namespace] .classname.methodname”
这是您分配给班级的班级名称,可能就像这样
Public Class RegexFunctionsClass
VB或C#程序集中定义的方法的名称。