Sql server 是否可以将sql clr函数重写为sql存储过程?
我在项目中使用sql clr程序集和sql clr用户定义函数。例如:Sql server 是否可以将sql clr函数重写为sql存储过程?,sql-server,stored-procedures,azure-sql-database,user-defined-functions,sqlclr,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 S
[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存储过程或其他内容?因此您希望直接从T-sql执行HTTP请求。那是不行的,对不起 目前,Azure SQL数据库不支持SQLCLR(甚至不支持
SAFE
程序集)。假设您在适当的上下文中使用SQLCLR来执行T-SQL中无法执行的操作,那么不,在Azure SQL数据库中没有等效项。然而,即使Azure SQL数据库再次支持SQLCLR(从2014年底到2016年4月中旬,它支持SQLCLR的时间刚刚超过18个月),它也不太可能支持执行网络或文件系统等外部请求。因此,即使在Azure SQL数据库允许SQLCLR程序集的期间,问题中的web请求仍然不受支持
这种方法在新版本上很可能不起作用,但我不能肯定。一种打开http客户端的方法?不,我认为在存储过程中能够做到这一点将是一件可怕的事情。。。。但是,在SQL CLR函数中也做了一件可怕的事情:)这听起来像是你的应用程序服务器应该做的事情……为什么你把代码标记为[SqlFunction]。代码与访问数据库无关。代码正在对正在访问数据库的服务器执行Http请求。@jdweng OP将代码作为SQLCLR程序集(.SQL server内部的NET代码)运行,并使用
SqlFunction
对该方法进行赋值,因此该方法被创建为SQL UDF。SQL server是否有Http请求方法?不那么为什么要标记该方法呢?在迁移到Windows Azure SQL数据库时,对于具有用户定义的CLR类型的数据库,是否有其他选择?