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"};
程序中對參數進行操做便可。