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

有帮助吗?

解决方案

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

其他提示

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

[NAME_SPACE]是完全限定的类型名称,而不仅仅是名称空间
  - 即如果您的类在 My.Name.Space 的命名空间中被称为 StoredProcedures ,则必须使用 [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] 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top