我正在尝试使用.NET CLR创建存储过程。我成功地将以下代码编译成.NET 3.5 DLL。
Imports System.Math
Imports System.Text.RegularExpressions
Imports Microsoft.SqlServer.Server
Partial Public Class LevenshteinerAndSoundexer
<SqlProcedure()> _
Public Shared Function getLevenshteinDistance(ByVal string1 As String, ByVal String2 As String) As Integer
然后我使用此代码成功将其添加为程序集:
create assembly
LevenshteinLibrary
from 'Path\LevenshteinLibrary.dll'
但是当我用这段代码创建程序时
create procedure testCLR(@s1 nvarchar(1000), @s2 nvarchar(1000))
as external NAME LevenshteinLibrary.LevenshteinerAndSoundexer.getLevenshteinDistance
我收到错误
“在程序集中找不到Type'LevenshteinLibrary' 'LevenshteinLibrary'“
为什么不能“看到”这个功能?
当我在ILSpy中检查DLL时会发生什么:
以下是我展开图书馆时的样子
答案 0 :(得分:3)
根据您上传的图片,您的班级LevenshteinerAndSoundexer
位于名称空间LevenshteinLibrary
下。因此,在定义要使用的类时,您需要包含类的名称空间(在方括号内,以免混淆解析器):
create procedure testCLR(@s1 nvarchar(1000), @s2 nvarchar(1000))
as external NAME LevenshteinLibrary.[LevenshteinLibrary.LevenshteinerAndSoundexer].getLevenshteinDistance
-- Name of object in SQL --^ ^ Name of function in class --^
-- Full name of class (including namespace)-/