2013-05-17 63 views
3

我正在嘗試使用.NET CLR創建存儲過程。我成功將以下代碼編譯到.NET 3.5 DLL中。爲什麼t-sql在我的程序集中找不到我的函數?

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 

我得到的錯誤創建過程

「在程序集中找不到類型'LevenshteinLibrary' 'LevenshteinLibrary''

爲什麼不能「看」功能?

下面是當我檢查ILSpy的DLL會發生什麼:

enter image description here

這裏是什麼樣子時,我擴大了圖書館

enter image description here

+1

莫非[這個命名空間問題](HTTP://計算器。 COM /問題/ 7823488/SQL服務器 - 可以 - 不找型內式組裝)? – Pondlife

+0

你也可以使用ILSpy併發布你的DLL的截圖[就像Pondlife鏈接的問題一樣](http://i.stack.imgur.com/TnWgn.png)? –

+0

@ScottChamberlain我將不得不要求SA安裝需要幾天的ILSpy – bernie2436

回答

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)-/ 
相關問題