作者pobie (嗯)
看板Database
标题Re: [SQL ] SQL Server 2008 R2 执行外部网址
时间Mon Nov 12 16:22:21 2012
※ 引述《TeemingVoid (TeemingVoid)》之铭言:
: 有两个方案提供给您参考 --
: 甲案,在 Trigger 以 xp_cmdShell 跑 WSH,然後透过 WSH 叫用 PHP。详细作法如下:
: 1. 在(例如) c:\temp 建立一个 ShellRun.vbs 程式档案。(存档时,编码请用 Ansi)
: 程式内容:
: Set Shell = WScript.CreateObject("WScript.Shell")
: Shell.Run WScript.Arguments(0)
: 2. 在你的 Trigger 叫用 ShellRun.vbs,例如这样:
: xp_cmdshell 'dir c:\ > c:\temp\report.txt'
: xp_cmdshell 'c:\temp\ShellRun.vbs "http://www.udn.com"'
: 乙案,不使用 xm_cmdShell,透过 OLE Automation 向 Web Server 发出 request。i.e.
: sp_configure 'show advanced options', 1;
: GO
: RECONFIGURE;
: GO
: sp_configure 'Ole Automation Procedures', 1;
: GO
: RECONFIGURE;
: GO
: Declare @Object as Int
: Declare @ResponseText as Varchar(8000)
: Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
: Exec sp_OAMethod @Object, 'open', NULL, 'get', 'http://www.udn.com', 'false'
: Exec sp_OAMethod @Object, 'send'
: Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
: Select @ResponseText
: Exec sp_OADestroy @Object
: GO
感谢大大的帮忙~! 在下使用方案一,确实有达到需求~真的非常感谢
但有个疑问是会不会有 deadlock 的情况出现呢?
我的 trigger 做法是将 SQL 执行 DML 後被修改的资料(delete 时是修改前资料)
做成一份 RAW XML 丢进 dbo.Log 资料表里
之後在执行 xp_cmdshell 去执行我的 php,将 dbo.Log 资料取出
并组成字串透过 WebService 送到另一端 DB 去
原始作法是使用 xp_cmdshell 执行 php.exe,却不幸发生 deadlock 的状况
虽然使用 ShellRun.vbs 解决了 deadlock 的问题
但往後会不会在资料量大与频繁时又发生 deadlock 的情况呢?
望大大能替资质愚笨的在下解答,感谢大大的大恩大德。 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.44.121