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

我可以使用打开的连接从存储过程调用 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;
    }
}

这是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' )

最佳答案

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

导入程序集

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

DatabaseName -> Programmability -> Assemblies -> (Right Click) 'New Assembly...'

在“New Assembly”对话框窗口中,选择 Path to assembly 字段下的 Browse,然后选择要导入的程序集。调整权限并单击 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]

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

https://stackoverflow.com/questions/29916790/

相关文章:

c# - 在 C# 中实现 jaccard 相似度

ruby - 我在哪里可以看到我的浏览器发送的 http 请求

java - String.split() 如果在字符串的最后部分,则忽略定界符之间的空值

asp.net-mvc - 如何在 web.config 中设置密码和用户名

python - 类型错误 : key is not

erlang - 执行Erlang脚本时抛出"init terminating in do_boot

.net - Nuget - 无法解析以前可以解析的包

PHP - 如何获取 n 深多维数组的所有数组值?

bash - ANSI 转义在 `printf` 中不起作用

python - 列出目录中的所有文件 - 按大小过滤