SQL Server能否发送web请求?
我在本地网络上有一个SQL Server数据库和一个intranet web应用程序。intranet web应用程序创建记录并将其发送到数据库。我有一个Internet web应用程序,我想使用本地网络上的SQL Server数据库将新记录发送到该应用程序 由于各种原因,我无法更改/修改intranet web应用程序,因此我唯一的选择是在本地SQL Server上创建一个触发器,该触发器将使用某种http post请求或url调用向Internet web应用程序发送新记录 INTERNET web应用程序使用RESTful api进行设置,该api可以通过向公共可访问url(例如)发送表单来接收新记录 有人知道通过url发送数据(xml、json、url中的普通变量)是否可以在SQL Server中完成吗 谢谢你的任何想法 作为一个好的(相当可靠和可扩展)选项,您可以使用与web应用程序/web服务交互SQL Server能否发送web请求?,sql,sql-server,sql-server-2005,tsql,Sql,Sql Server,Sql Server 2005,Tsql,我在本地网络上有一个SQL Server数据库和一个intranet web应用程序。intranet web应用程序创建记录并将其发送到数据库。我有一个Internet web应用程序,我想使用本地网络上的SQL Server数据库将新记录发送到该应用程序 由于各种原因,我无法更改/修改intranet web应用程序,因此我唯一的选择是在本地SQL Server上创建一个触发器,该触发器将使用某种http post请求或url调用向Internet web应用程序发送新记录 INTERNET
例如,搜索“”或“”。这是可能的,但在现实世界中,这比您想象的简单方法要复杂一点。首先,让触发器等待HTTP请求是不可接受的:
- 首先,您的应用程序将爬行到急停状态,因为触发器将阻止资源(主要是锁)等待来自某个遥远的WWW服务的响应李>
- 第二,更微妙但更糟糕的是,存在回滚时的正确性问题。如果向HTTP请求发出的事务回滚,则无法“撤消”HTTP请求
sp_configure 'show advanced options', 1;
go
RECONFIGURE;
go
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
然后创建一个函数
create function GetHttp
(
@url varchar(8000)
)
returns varchar(8000)
as
BEGIN
DECLARE @win int
DECLARE @hr int
DECLARE @text varchar(8000)
EXEC @hr=sp_OACreate 'WinHttp.WinHttpRequest.5.1',@win OUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAMethod @win, 'Open',NULL,'GET',@url,'false'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAMethod @win,'Send'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OAGetProperty @win,'ResponseText',@text OUTPUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
EXEC @hr=sp_OADestroy @win
IF @hr <> 0 EXEC sp_OAGetErrorInfo @win
RETURN @text
END
您可以尝试使用此CLR存储过程 它有多个过程,允许您调用仅需要参数的SimplesAPI,甚至可以传递多个标头和令牌身份验证
或SSIS-集成服务。@marc\s:根据我不太熟悉的经验,SSIS是一个更复杂的主题SQLCLR@marc_s同样,使用SSI,您最终不得不编写C#,因为它通常不够灵活。我不会等待http请求。我希望触发器启动http请求。我希望触发器在更新新记录时调用url。我不需要它等待响应或类似的东西,但是触发器将等待http请求。触发器将在插入/更新时执行,只有当触发器完成执行时,插入/更新才会完成并“完成”插入/更新过程。这一切都是同步发生的。触发器应尽可能少且快。如果可能,除了将审核类型数据转储到另一个表之外,不要使用触发器。
select dbo.GetHttp('http://127.0.0.1/mywebpage.php')