【问题标题】:How do I deploy a managed stored procedure without using Visual Studio?如何在不使用 Visual Studio 的情况下部署托管存储过程?
【发布时间】:2010-09-12 13:31:52
【问题描述】:

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

【问题讨论】:

    标签: sql stored-procedures clr


    【解决方案1】:

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

    【讨论】:

    • 我发现 this 是一个有用的资源,可以从命令行完成整个事情
    【解决方案2】:

    要在上面@kcrumley 的回答中添加更多细节/说明:

    [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] 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多