2008-09-23 103 views
7

我读过的一切都表明,在制作托管存储过程时,要在Visual Studio中右键单击并选择“部署”。这很好,但如果我想将它部署在Visual Studio之外的许多不同位置呢?我尝试使用SQL中构建的项目创建程序集,并且在添加程序集的同时,它并未创建程序集。有没有人想过如何在不使用Visual Studio的情况下直接在SQL中执行此操作?如何在不使用Visual Studio的情况下部署托管存储过程?

回答

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]只是该名称空间中方法的名称。

+0

我发现[this](https://msdn.microsoft.com/en-us/library/ms254956(v = vs.90).aspx )是从命令行完成整个事情的有用资源 – user2426679 2016-08-18 18:08:54

2

对于一些更细节/澄清添加到@ kcrumley的anwser以上:

[NAME_SPACE]是完全合格的类型名称并不仅仅是命名空间
- 也就是说,如果你的类是在命名空间称为StoredProceduresMy.Name.Space,您必须为[NAME_SPACE]部分使用[My.Name.Space.StoredProcedures]

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

我也挣扎了一下试图找出如何添加带参数/参数的过程。所以继承人样本为其他人试图这样做:

CREATE PROCEDURE [YOUR_FUNCTION] 
( 
    @parameter1 int, 
    @parameter2 nvarchar 
) 
WITH EXECUTE AS CALLER 
AS 
EXTERNAL NAME [YOUR_ASSEMBLY].[StoredProcedures].[YOUR_FUNCTION] 
相关问题