在SQL Server中注册c#汇编和使用函数

本文关键字:函数 汇编 SQL Server 注册 | 更新日期: 2023-09-27 18:04:22

假设我在c#中有一个静态类:

public static class Math
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static int Add(int a, int b)
    {
        return a + b;
    }

    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void Void(int a, int b)
    {
    }
    static void Main(string[] args)
    {
    }
}

我知道@faester的回答,在SQL中使用这个函数我们做:

 EXEC SP_CONFIGURE 'clr enabled', 1
    GO
    RECONFIGURE
    GO
    -- CONSIDER: DROP ASSEMBLY SqlClr
    GO
    CREATE ASSEMBLY SqlClr 
    FROM 'pathtoassembly'
    WITH PERMISSION_SET = SAFE;
    GO
    SELECT * FROM sys.assemblies
    GO
    CREATE FUNCTION [MathAdd] (@a int, @b int)
    RETURNS INT 
    AS EXTERNAL NAME [SqlClr].Math.[Add]
    GO 
    CREATE PROCEDURE [Void] @a INT, @b INT
    AS EXTERNAL NAME [SqlClr].Math.[Void]
    GO 
    SELECT dbo.MathAdd (1, 2)
    EXEC void 1, 2
为了做这个例子,首先我在c#文件中添加了一个main
using System;
using System.Collections.Generic;
using System.Text;
public static class Math
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static int Add(int a, int b)
    {
        return a + b;
    }

    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void Void(int a, int b)
    {
    }
    static void Main(string[] args)
    {
    }
}

所以,当我执行SQL代码时…我要添加什么路径呢?我刚才在做:

CREATE ASSEMBLY SqlClr 
    FROM 'C:'Visual Studio 2005'Projects'ConsoleApplication1'ConsoleApplication1'bin'Debug'ConsoleApplication1.exe'
    WITH PERMISSION_SET = SAFE;
    GO

显然我不能添加.exe,所以尝试使用sln文件和cs文件,但不能让它工作…

我得到以下错误:

配置选项'clr enabled'从1变为1。运行RECONFIGURE语句安装。6501号电话,16层,7州,1号线CREATE ASSEMBLY失败,因为它无法打开物理文件"C: ' Visual Studio2005 ' '项目ConsoleApplication1 ' ConsoleApplication1 ' bin '调试' ConsoleApplication1.exe":5 (acc否认)。

我的问题除了什么放在路径,是关于如何构建c#代码,我只构建它像任何其他程序,我添加其他东西…

  • 它缺少什么?

在SQL Server中注册c#汇编和使用函数

我怀疑它不喜欢控制台应用程序…

有关演练,请参阅http://www.setfocus.com/technicalarticles/articles/clrfunctionforsqlserver.aspx

一些有趣的资源见http://msdn.microsoft.com/en-us/library/w2kae45k.aspx