【问题标题】:Calling a URL from a stored procedure in SQL Server?从 SQL Server 中的存储过程调用 URL?
【发布时间】:2011-01-25 20:35:54
【问题描述】:

只是想知道是否可以从存储过程中调用 URL(最终将该过程添加到 sql 作业中)当网页刷新我的数据库时,如果我可以自动化这个过程,那就太好了。

编辑:

我希望能够从存储过程中请求网页。在所需网页的页面加载上,有一个刷新我的数据库的功能。我希望它每天凌晨 4 点刷新我的数据库。为了让我不要在凌晨 4 点手动进入该站点(仍在睡觉),我需要别的东西来为我做这件事。我认为 sql 作业会很棒,因为我可以设置时间和作业。我不太了解 PowerShell,想知道是否可以请求 URL,或者使用存储过程或任何其他方式访问 url。

【问题讨论】:

  • 您能详细描述一下您为什么要这样做吗?这种请求通常会敲响警钟……
  • 好的,更详细地编辑了它。不是想发出警报,只是懒惰,我想要别的东西来请求网页,虽然我可以看到你来自哪里
  • 这似乎是一种过于复杂的方法来做一些相当简单的事情,即“每天凌晨 4 点执行代码”。您可以使用计划任务(在 Windows 中)或 Windows 服务等来做到这一点。
  • 我的电脑无法开机(或作为笔记本电脑连接到网络),我认为我无法在测试服务器上设置计划任务
  • 这是从 SP 调用 URL 的另一种方法(使用 sp_OACreate 'WinHttp.WinHttpRequest.5.1' 等)。但与其他方法一样,需要降低 SQL Server 的安全性:sqlteam.com/forums/topic.asp?TOPIC_ID=111356

标签: sql sql-server stored-procedures


【解决方案1】:

@newurl 是您要点击的网址 @response 是您收到的回复

EXEC Sp_oacreate  'MSXML2.XMLHTTP',@obj OUT;
EXEC Sp_oamethod @obj,'open',NULL,'get',@newurl,'false'
EXEC Sp_oamethod @obj,'send'
EXEC Sp_oamethod @obj,'responseText',@response OUTPUT   
EXEC Sp_oadestroy @obj

【讨论】:

    【解决方案2】:

    我很确定 MS SQL 不允许您直接执行此操作.. 明显的安全问题。但是,我认为您可以通过使用 xp_cmdshell 执行 vbscript 文件并在该文件中创建对站点的 xmlhttp 请求来解决它。

    xp_cmdshell 命令:

    EXEC master..xp_cmdshell 'c:\<file>.vbs',no_output  
    

    VBScript:

    call main()
    sub main()
        Dim xmlHTTP, url
        Set xmlHTTP = WScript.CreateObject("Msxml2.XMLHTTP")
        url = "<url>"
        xmlHTTP.Open "GET", url, False
        xmlHTTP.Send  ""
    end sub 
    

    编辑

    回应有关如何异步执行此操作的评论。

    xp_cmdshell 命令:

    EXEC master..xp_cmdshell 'c:\caller.vbs',no_output
    

    调用者的VBScript:

    call main()
    sub main()
        Dim scmd
        Set scmd = "c:\windows\system32\cscript.exe //nologo c:\<originalVBS>.vbs"
        createobject("wscript.shell").run scmd,0,false
    end sub
    

    【讨论】:

    • 无论如何异步执行此操作?这样 exec 命令会继续运行 util 所有 URL 处理都已完成
    • @Diego:我更新了代码以反映如何模仿异步方法。
    【解决方案3】:

    您可以使用任务计划程序(Windows 的一部分)来完成。只需创建一个打开 Internet Explorer 并浏览到页面的计划任务:

    "C:\Program Files\Internet Explorer\iexplore.exe" "http://yoursite.com/yourpage.aspx"
    

    或者对于 64 位 Windows:

    "C:\Program Files (x86)\Internet Explorer\iexplore.exe" "http://yoursite.com/yourpage.aspx"
    

    或者,使用 SQL Server 代理创建作业,并使用上述命令创建类型为“操作系统 (CmdExec)”的单个步骤。

    【讨论】:

    • 但我的电脑无法开机(或无法连接到网络),而且我认为我无法在测试服务器上设置计划任务
    • @Spooks:在数据库服务器上安排?还是在 SQL Server 代理中使用相同命令的命令任务?
    • 值得研究。我使用共享主机提供商,他们让我安排任务,因此即使您使用共享主机也可以。
    • 我认为我无权访问数据库服务器上的任务计划程序。我可以访问 SQL Server 代理中的命令任务...
    猜你喜欢
    • 2014-03-30
    • 2015-05-08
    • 2021-05-26
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多