2017-05-31 62 views
0

我试图通过SQL Server 2012中打开一个网页的网址,我们试图SQLCLR但其outdadted,我们试图运行一个批处理文件,它会粘在执行过程中打开一个URL与SQL Server 2012

EXEC xp_cmdshell 'c:\PATH.bat' 

是这样的代码,我们用来打开批处理文件,然后将其卡在执行查询和我等待5分钟仍然没有弹出

enter image description here

我们已经通过文件权限检查

,一切都被允许,它是第四次尝试这和我无法管理可以有人请给我看一个替代解决方案?

+0

没有,SQLCLR没有比试图使用旧的,不安全的更加不合时宜,不鼓励'xp_cmdshell'。事实上,试图从数据库中“打开URL”听起来像是一个非常糟糕的设计。这是SSIS或外部应用程序的工作。 *不*数据库。只需使用适当的工具进行工作 –

+1

顺便说一句*过时的SQLCLR *是权力hierarchyid和空间类型 –

+0

我是新来的这项工作,什么SSIS,我们尝试的SQLCLR的方法已过时 –

回答

0

尽管从SQL Server内部访问URL有优点和缺点,但SQLCLR绝对是而不是已过时。即使你有没有自定义组件,它仍然被用于内部几件事情:

  • 层次,几何,地理数据类型
  • 复制
  • 内置多种功能,如FORMATTRY_PARSE

有关SQLCLR什么实际并能做到,请参阅该系列的,我对SQL Server的中央这个话题写文章的详细信息:Stairway to SQLCLR(免费注册是需要阅读该网站上的内容,但它是值得的:-)。等级1(“什么是SQLCLR?”)是对SQLCLR是什么和不是什么的全面考察。

如果你想要一个命令行实用程序,那么你可能能够脱身使用curl

如果你想有一个预先制作SQLCLR功能,可以处理这个,这样你就不必担心在SQLCLR做这样的操作的学习曲线,那是我创建的SQL#库可用(但它不在免费版本中;仅适用于完整/付费版本)。


,如果你是将要作出一个触发器中这个URL /网页服务队电话(无论是SQLCLR触发器或T-SQL触发器调用SQLCLR对象),那么你需要非常因为触发器在系统创建的事务中执行(如果没有显式事务已经存在)。这意味着事务的实际提交(即真正将更改保存到数据库)将等待外部呼叫完成。你碰到这里的两个问题是:

  • Web服务不响应的超快速(和它需要回应超级快)
  • 有特定URI这样做更多的并发请求.NET等待,直到有一个开放。这由ServicePointManager.DefaultConnectionLimit控制,可以通过HttpWebRequest对象访问(我认为有ServicePoint属性)。默认限制为2,所以任何超过1 - (一般来说)3调用每秒Web服务可能导致阻塞,即使Web服务具有快速的反应能力。每秒1 - 3次调用可能看起来不多,但如果在多个表的审计触发器方案中使用此方法,则很容易达到此限制。因此,您需要将限制增加到远高于2的限制,并且每次调用都会存储在应用程序域中,因为内存压力有时会被卸载。

欲了解更多信息和注意事项,请在这里看到的S.O我的相关回答类似的问题:

此外,此S.O.问题是希望得到附近的DML变化实时通知方面非常相似,并可能适用于你的目标:

SqlDependency vs SQLCLR call to WebService

+0

非常感谢我现在就开始研究它 –

+0

@PioSammut开始研究什么,到底是什么?你是非常含糊的,如果你真的想在触发器中做这个审核变更,那么我可能会改变,或至少澄清我的建议。请更新这个问题,具体来说,你正试图完成。 –

+0

听着哥们儿,你不需要这么生气,我的工作场所迫使我这样做,而我对SQL有初学者的知识,感谢你的建议,对不起,没有给出很多细节,我不允许因为它在政府之下,所以我要问一个我一无所知的问题,所以对不知道的事情感到抱歉 –