【问题标题】:Is it possible to rewrite sql clr function as sql stored procedure?是否可以将 sql clr 函数重写为 sql 存储过程?
【发布时间】:2019-01-06 11:18:30
【问题描述】:

我在我的项目中使用带有 sql clr 用户定义函数的 sql clr 程序集。例如:

[SqlFunction]
public static SqlString InsertCampaignRecipients(SqlString url) 
{
    var rowData = string.Empty;
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
        var response = client.GetAsync(new Uri(url.Value)).Result;

        if (response.IsSuccessStatusCode)
        {
            var result = response.Content.ReadAsStringAsync().Result;

            if (result.IndexOf(@"""Exception"":null}") > 0) //success
            {
                rowData = "success";
            }
            else
            {
                rowData = string.Empty;
            }
        }
        else
        {
            rowData = string.Empty;
        }
    }
    return rowData;
}

但我想在 clr 不支持的 Azure 上迁移。 解决办法是什么?是否可以将 sql clr 函数重写为 sql 存储过程之类的?

【问题讨论】:

  • 打开http客户端的方法?不,我认为能够在存储过程中做这将是一件可怕的事情......但是,在 SQL CLR 函数中做这件事也是一件可怕的事情 :) 这听起来像你的应用程序服务器应该做...
  • 为什么你的代码标有[SqlFunction]。该代码与访问数据库无关。该代码正在向正在访问数据库的服务器发出 Http 请求。
  • @jdweng OP 将代码作为 SQLCLR 程序集(SQL Server 中的 .NET 代码)运行,并使用 SqlFunction 赋予该方法,因此该方法被创建为 SQL UDF。
  • SQL Server 有 HTTP 请求方法吗?不!!!那么为什么要给方法贴上标签呢?
  • 在迁移到 Windows Azure SQL 数据库时,对于具有用户定义 CLR 类型的数据库,是否有任何替代方案?

标签: sql-server stored-procedures azure-sql-database user-defined-functions sqlclr


【解决方案1】:

所以您想直接从 T-SQL 发出 HTTP 请求。这是不行的,对不起!

【讨论】:

    【解决方案2】:

    目前,Azure SQL 数据库不支持 SQLCLR(甚至不支持 SAFE 程序集)。假设您在正确的上下文中使用 SQLCLR 执行无法在 T-SQL 中完成的操作,那么不,在 Azure SQL 数据库中没有等效项。但是,即使 Azure SQL 数据库再次支持 SQLCLR(从 2014 年末到 2016 年 4 月中旬仅支持了 18 个多月),它仍然不太可能支持执行外部请求,例如网络或文件系统。因此,即使在 Azure SQL 数据库确实允许 SQLCLR 程序集期间,问题中的 Web 请求仍然不受支持。

    可能在新的Azure SQL Database Managed Instance 上工作的可能性很小,但我不能肯定。

    【讨论】:

      【解决方案3】:

      您可以为 SQL Server 使用 C# 语言扩展 适用于 SQL Server 的 Microsoft 开源 .NET 5 C# 语言扩展 https://visualstudiomagazine.com/articles/2021/09/10/csharp-sql-server.aspx

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 2018-04-29
      • 1970-01-01
      • 2013-02-19
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      相关资源
      最近更新 更多