如何在不使用Visual Studio的情况下部署托管存储过程?

时间:2008-09-23 22:23:02

标签: sql stored-procedures clr

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

2 个答案:

答案 0 :(得分: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]只是该命名空间中方法的名称。

答案 1 :(得分:2)

为上面的@ kcrumley's 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]