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

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

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

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” 的相关文章

C# 一些基本的控件代码

c# 怎么用代码设置picturebox的大小,位置 picturebox.Location = new Point(x,y) 位置picturebox.Size = new Size(0,0);大小,Size里面的参数自己设置,前面是宽度,后面是高度 如何用C# 打开和保存BMP文件 操作如下:...

怎样清空SQL SERVER数据库,清空后让表的ID自增列从1开始??

1、truncate table 表名2、dbcc checkident(表名,RESEED,0)...

Quartus II:从verilog代码生成原理图框图(bsf文件)

Quartus II:从verilog代码生成原理图框图(bsf文件)

首先说下,为什么用这个功能。 个人习惯顶层用原理图方式绘制,底层模块用verilog代码实现,这样的话在顶层原理图里可以清晰的知道要干啥,比代码更直观。 方法: File ->Create/Update -> Create Symbol Files for Current File 生...

Windows Server 2008 R2上搭建ShadowSocks服务

Shadowsocks是一个轻量级隧道Socks5代理,可加密网络通道。 1、下载nodejs     首先要进入https://nodejs.org/,点击页面上的INSTALL安装相对应的node环境。 2、安装nodejs   &...

NPOI导出Excel表 如何实现短日期格式

https://q.cnblogs.com/q/43888/ 问题: 因为导出EXCEL 档日期格式永远都是 2012-11-22 14:51:11 ,而我们希望结果永远只是 2012-11-22, 我修改完的代码如下: case "System.DateTime": //...

略坑的STM8L IO外部中断

略坑的STM8L IO外部中断

问题: STM8的GPIO中断,如何判断是哪一个IO中断的? STM8只有一个总的GPIOX(ABCDE)中断,怎么判断是哪个引脚呢? 解决办法: 在设计硬件电路的时候就要注意这个问题,能分散开的就分散开。 至于有的人说的在中断中查询IO电平来判断是哪个IO,那是有缺陷的 例如,一个上升沿中断,脉...

发表评论

访客

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