7

我读过的所有内容都表明,在创建托管存储过程时,在 Visual Studio 中单击鼠标右键并选择部署。这很好用,但是如果我想在 Visual Studio 之外将它部署到多个不同的位置怎么办?我尝试使用在 SQL 中构建的项目的 dll 创建程序集,虽然它确实添加了程序集,但它没有从程序集中创建程序。有没有人想出如何在不使用 Visual Studio 的情况下直接在 SQL 中执行此操作?

4

2 回答 2

6

将程序集 DLL 文件复制到各种服务器上的本地驱动器。然后在数据库中注册您的程序集:

create assembly [YOUR_ASSEMBLY]
from '(PATH_TO_DLL)'

...然后您创建一个引用 DLL 中适当公共方法的函数:

create proc [YOUR_FUNCTION]
as
external name [YOUR_ASSEMBLY].[NAME_SPACE].[YOUR_METHOD]

请务必使用 [ 括号,尤其是在 NAME_SPACE 周围。命名空间中可以有任意数量的点,但 SQL 标识符不能,除非这些部分被方括号明确分隔开。当我第一次使用 SQL CLR 时,这是许多令人头疼的问题。

需要明确的是,[YOUR_ASSEMBLY] 是您在 SQL 中定义的名称;[NAME_SPACE] 是 DLL 内的 .NET 命名空间,可以在其中找到您的方法;[YOUR_METHOD] 只是该命名空间中方法的名称。

于 2008-09-23T23:24:38.703 回答
2

为上面的@kcrumley 的anwser 添加更多细节/说明:

[NAME_SPACE] 是完全限定的类型名称,而不仅仅是命名空间
——也就是说,如果你的类StoredProcedures在命名空间中被调用My.Name.Space,你必须使用[My.Name.Space.StoredProcedures][NAME_SPACE] 部分。

如果您的托管存储过程在一个没有定义命名空间的类中,您只需使用裸类名称(例如[StoredProcedures])。

我也努力想弄清楚如何添加带有参数/参数的过程。因此,这里有一个示例供其他尝试这样做的人使用:

CREATE PROCEDURE [YOUR_FUNCTION] 
( 
    @parameter1 int,
    @parameter2 nvarchar
) 
WITH EXECUTE AS CALLER 
AS
EXTERNAL NAME [YOUR_ASSEMBLY].[StoredProcedures].[YOUR_FUNCTION] 
于 2010-05-20T13:45:10.637 回答