2013-05-17 102 views
2

我試圖在SQL Server 2008中調用我的第一個CLR存儲過程。我已成功編譯DLL並創建了程序集。現在,我想Create the stored procedure that references the registered assembly by using the CREATE PROCEDURE statement.this tutorial,我得到的語法錯誤......在創建CLR存儲過程時出現語法錯誤

--This line worked. Just including this code just to show what I am doing ... 
--create assembly 
--LevenshteinLibrary 
--from 'Drive Letter:\Path\LevenshteinLibrary.dll' 

create procedure testCLR(@s1 nvarchar(1000), @s2 nvarchar(1000)) 
as external LevenshteinLibrary.getLevenshteinDistance --Incorrect syntax near '.'. 

我應該怎麼做來創建此過程?我沒有在msdn create procedure頁面上看到任何解釋「as external」正確語法的內容。

的VB.net代碼如下所示:

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 
+1

鏈接到的文檔適用於沒有CLR過程的SQL 2000。 [2008文檔](http://msdn.microsoft.com/en-us/library/ms187926(v = sql.100).aspx)顯示正確的語法(這不是你現在所擁有的)。 – Pondlife

回答

3

這是否對你的工作?

create procedure testCLR(@s1 nvarchar(1000), @s2 nvarchar(1000)) 
as external NAME LevenshteinLibrary.LevenshteinerAndSoundexer.getLevenshteinDistance 

As External的文檔有三個部分的名稱,並且只有兩個部分。

另外,正如Pondlife指出的那樣,As External也需要NAME


通常,類是「部分」類,我不知道你怎麼會不一個。我認爲,你可能還需要有一個屬性前綴你的VB方法,像這樣:

Partial Public Class LevenshteinerAndSoundexer 

    <SqlProcedure()> _ 
    Public Shared Function getLevenshteinDistance(ByVal string1 As String, ByVal String2 As String) As Integer 

你可能想看看這篇文章,並按照它們所描述那裏的過程:http://msdn.microsoft.com/en-us/library/5czye81z(v=vs.80).aspx

+1

你還需要有'AS EXTERNAL NAME';省略'NAME'會導致語法錯誤。 – Pondlife

+0

@Pondlife謝謝,我也加了。 – RBarryYoung

+0

@RBarryYoung謝謝。它會返回一個錯誤 在程序集「LevenshteinLibrary」中找不到類型'LevenshteinerAndSoundexer'。 – bernie2436