是否可以将sql clr函数重写为sql存储过程?

时间:2018-07-30 08:38:59

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

我在我的项目中使用带有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存储过程吗?

2 个答案:

答案 0 :(得分:1)

因此,您想直接从T-SQL发出HTTP请求。对不起,这是不能做的事!

答案 1 :(得分:0)

当前,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上运行的可能性很小,但我不能肯定。