使用当前连接从sql存储过程调用dll函数

Men*_*ger 1 sql sql-server dll clr sqlconnection

我可以使用打开的连接从存储过程调用 dll 吗?

我有一个从 SQL Server 获取数据的 dll,当我从存储过程调用它时,我不想打开一个新连接。

谢谢

这是一个例子

public class Class1
{
    public static SqlString GetName(SqlString str)
    {
        SqlCommand cmd = new SqlCommand(str.ToString());
        cmd.CommandType = System.Data.CommandType.Text;

        string name = cmd.ExecuteScalar().ToString();
        return name;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 SQL 代码

CREATE FUNCTION fn_TestConnection
(
    @str nvarchar(255)
)
RETURNS nvarchar(max)
AS EXTERNAL NAME TestConnection.[TestConnection.Class1].GetName
GO

SELECT dbo.fn_TestConnection('SELECT FName FROM Clients WHERE Id = 1' )
Run Code Online (Sandbox Code Playgroud)

Gle*_*leb 6

这些说明适用于Microsoft SQL Server Management Studio 2014

导入装配

首先,您需要通过导航到“新建程序集”对话框窗口,将该程序集导入 SQL Server Management Studio 内的数据库中:

数据库名称 -> 可编程性 -> 程序集 ->(右键单击)“新建程序集...”

在“新建程序集”对话框窗口中,BrowsePath to assembly字段下选择并选择要导入的程序集。调整权限并单击ok

在 SQL 函数中包装汇编方法

接下来,您需要创建 sql 函数来包装您的汇编方法,如下所示:

CREATE FUNCTION [dbo].[fn_funcName](@str [varchar](max))
RETURNS 
   varchar(max) 
WITH EXECUTE AS CALLER
AS 
EXTERNAL NAME [YourSqlAssemblyName].[YourAssemblyName.Class1].[GetName]
Run Code Online (Sandbox Code Playgroud)

如果您想从函数中返回表,请阅读 .NET 中的 SqlFunctionAttribute。