为什么t-sql在我的程序集中找不到我的函数?

时间:2013-05-17 20:22:13

标签: .net sql-server-2008 tsql

我正在尝试使用.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时会发生什么:

enter image description here

以下是我展开图书馆时的样子

enter image description here

1 个答案:

答案 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)-/