Eri*_*ikL 7 t-sql sql-server clr web-services sql-server-2012
我试图在TSQL中构建一个存储过程来调用Web服务.我以前在Oracle中做过这个,但在MSSQL中似乎并不那么容易.当然,有很多理由不在存储过程中执行此操作,但由于此过程仅用于每日批处理,因此性能不是太大的问题.我想要做的事情如下:向webservice发送一个全名,webservice将返回一个名称分为名字,前缀,姓氏等的名称.返回的值将需要写入表.
我在http://www.vishalseth.com/post/2009/12/22/Call-a-webservice-from-TSQL-(Stored-Procedure)找到了一个有趣的程序 - 使用-MSXML.aspx似乎完全可以做到我想要什么,但只要你在调用中添加一个主体,我就会遇到像"参数不正确"这样的错误.这篇文章也说明了这一点,显然没有简单的解决方案.我绝对需要发送请求正文.
我还阅读了很多关于使用CLI或"Web服务任务编辑器"或"SSIS"位来解决它的文章,我找不到任何关于从哪里开始的教程.现在我只有Microsoft SQL服务器管理工作室.
顺便说一下,我在SQL Server 2012上.
关于我应该采取什么方向的任何想法?
我已经找到了这个描述,看起来很干净:http://www.databasejournal.com/features/mssql/article.php/3821271/Calling-a-Web-Service-from-within-SQL-Server.htm但是,在安装visual studio 2012并创建"SQL服务器数据库项目"后,我无法在解决方案上下文菜单中选择"添加Web引用",菜单中只有这样的选项.
在过去,我使用了以下方法,它可能不是最好的方法,但它已成功地为我工作:
DECLARE @obj int,
@url VarChar(MAX),
@response VarChar(MAX),
@requestHeader VarChar(MAX),
@requestBody VarChar(MAX)
SET @url = 'http://....'
SET @requestBody = '<soapenv:Envelope>
<soapenv:Header/>
<soapenv:Body>
...
</soapenv:Body>
</soapenv:Envelope>'
EXEC sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT
EXEC sp_OAMethod @obj, 'Open', NULL, 'GET', @url, false
EXEC sp_OAMethod @obj, 'setRequestHeader', NULL, 'Content-Type', 'text/xml;charset=UTF-8'
EXEC sp_OAMethod @obj, 'setRequestHeader', NULL, 'SOAPAction', 'POST'
EXEC sp_OAMethod @obj, 'setRequestHeader', NULL, 'Content-Length', LEN(@requestBody)
EXEC sp_OAMethod @obj, 'send', NULL, @requestBody
EXEC sp_OAGetProperty @obj, 'responseText', @response OUT
SELECT @response [RESPONSE]
EXEC sp_OADestroy @obj
Run Code Online (Sandbox Code Playgroud)
我用它来调用一个Web服务,它生成一个报告并在方法中通过电子邮件发送它.
归档时间: |
|
查看次数: |
50893 次 |
最近记录: |