当前位置:首页 > 技术心得 > 正文内容

sqlserver数据库触发器调用外部exe

xjtudll5年前 (2021-08-31)技术心得4450

https://www.cnblogs.com/syp1Blog/p/9482088.html

sqlserver数据库触发器调用外部exe,同事可以选择参入参数!

sqlserver使用 master..xp_cmdshell 进行外部exe的执行。

使用master..xp_cmdshell 之前需要在据库中启用xp_cmdshell ,启用和关闭方式如下:

copycode

--开启xp_cmdshell: exec sp_configure 'show advanced options', 1;  reconfigure;  exec sp_configure 'xp_cmdshell', 1;  reconfigure;  exec sp_configure 'show advanced options', 0;  reconfigure;  --关闭xp_cmdshell: exec sp_configure 'show advanced options', 1;  reconfigure;  exec sp_configure 'xp_cmdshell', 0;  reconfigure;  exec sp_configure 'show advanced options', 0;  reconfigure;

copycode[1]

外部程序物理路径:“D:\Debug\TEST.exe”

其中,exe程序最好是控制台应用程序,自己执行完成后自己可以进行关闭的程序,否则数据库中会一直进行循环。

第一种,简单的执行外部exe程序:

数据库某个表格中写触发器:

copycode[2]

 1 USE [dt_teststep]  2 GO  3   4 SET ANSI_NULLS ON  5 GO  6   7 SET QUOTED_IDENTIFIER ON  8 GO  9  10 CREATE TRIGGER [dbo].[tritest] 11 ON [dbo].[tb_test] 12 FOR UPDATE --更改数据触发(insert、delete) 13 AS 14 BEGIN 15     EXEC master..xp_cmdshell 'D:\Debug\TEST.exe' 16      17     SET NOCOUNT ON; 18  19  20 END 21 GO

copycode[3]

当表格tb_test中数据更新修改时就会触发外部的exe程序。

第二种,外部程序需要传入参数

这里用控制台应用程序,

static void Main(string[] args){}

其中args为exe程序接收的传入的参数。

数据库中的触发器写法如下:

USE [dt_teststep] GO  SET ANSI_NULLS ON GO  SET QUOTED_IDENTIFIER ON GO  CREATE TRIGGER [dbo].[tritest] ON [dbo].[tb_test] FOR UPDATE AS BEGIN          declare @Type varchar(50) ,@Result varchar(100)     set @Type='参数1'     set @Result = 'cmd.exe /c D:\Debug\TEST.exe '+@Type+' "参数2"'     EXEC master..xp_cmdshell @Result          SET NOCOUNT ON;      -- Insert statements for trigger here  END GO

与第一种不同的是,带有参数,外部程序调用时改为先启动cmd,然后在进行exe的执行。

其中,参数1作为测试,声明变量,参数2 为直接写入的参数。

在exe程序中接收的参数就是string[] args={"参数1","参数2"};

程序中对参数进行操作即可。

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://xjtudll.cn/Exp/615/

标签: SQL
分享给朋友:

“sqlserver数据库触发器调用外部exe” 的相关文章

win7升级win10提示丢失api-ms-win-core-libraryloader-|1-1-1.dll

win7升级win10提示丢失api-ms-win-core-libraryloader-|1-1-1.dll

Win7 64bit 从win7升级到win10,到98%的时候提示说丢失.dll 解决办法: 用C:\Windows\System32\wimgapi.dll替换C:\Windows10Upgrade\wimgapi.dll即可 然后重新升级(由于相关文件已经下载好了,所以重新升级还是比较快的)...

浅析电波表——德国DCF码

浅析电波表——德国DCF码

参考文献:   http://en.wikipedia.org/wiki/DCF77 http://www.ptb.de/en/publikationen/news/html/news032/artikel/03207.htm http://www.ptb.de/cms/index.php...

iOS10,Xcode8上传AppStore的时候,找不到构建版本

iOS10,Xcode8上传AppStore的时候,找不到构建版本

参考资料:http://blog.csdn.net/u013283787/article/details/52593143 使用Xcode8成功上传app之后,在itunes connect 构建版本里根本找不到上传的版本。 网上搜了搜,又查了一下邮件    &nb...

SQL Server 2012 自动增长列,值跳跃问题(自增增加1000)【转载】

SQL Server 2012 自动增长列,值跳跃问题(自增增加1000)【转载】

介绍从 SQL Server 2012 版本开始, 当SQL Server 实例重启之后,表格的自动增长列的值会发生跳跃,而具体的跳跃值的大小是根据增长列的数据类型而定的。如果数据类型是 整型(int),那么跳跃值为 1000;如果数据类型为 长整型(bigint),那么跳跃值为 10000。从我们...

windows环境下TortoiseSVN多仓库(repository)转移合并(修改+转载)

http://www.lilin.net/blog/?p=1346 问题: 两个不同的版本库,放在不同的及其上,各有数个项目在里面,为了统一管理,我现在都集中在一个仓库内,然后用金山快盘,多个机器同步。 回答: 完美包含版本信息,把双库融合,方便管理同步。 自己尝试后发现问题...

Multisim导入MOSFET模型

文章来源:NI官网->在Multisim里导入MOSFET 模型 原文网址:http://digital.ni.com/public.nsf/allkb/E1DA418DD7A5E4A1862574B800219513 问题: 如何在Multisim器件里导入以“.MODEL&rd...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。