2013-05-17 35 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