我在我的项目中使用带有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存储过程吗?
答案 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上运行的可能性很小,但我不能肯定。