sqlserver數據庫觸發器調用外部exe

sqlserver數據庫觸發器調用外部exe,同事能夠選擇參入參數!sql

sqlserver使用 master..xp_cmdshell 進行外部exe的執行。shell

使用master..xp_cmdshell 以前須要在據庫中啓用xp_cmdshell ,啓用和關閉方式以下:數據庫

--開啓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;

 

外部程序物理路徑:「D:\Debug\TEST.exe」sqlserver

其中,exe程序最好是控制檯應用程序,本身執行完成後本身能夠進行關閉的程序,不然數據庫中會一直進行循環。測試

第一種,簡單的執行外部exe程序:spa

數據庫某個表格中寫觸發器:code

 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

當表格tb_test中數據更新修改時就會觸發外部的exe程序。server

 

第二種,外部程序須要傳入參數blog

這裏用控制檯應用程序,cmd

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"};

程序中對參數進行操做便可。

相關文章
相關標籤/搜索