2008-09-23 101 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] 
相關問題