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