sqlserver數據庫觸發器調用外部exe,同事可以選擇參入參數!
sqlserver使用 master..xp_cmdshell 進行外部exe的執行。
使用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”
其中,exe程序最好是控制台應用程序,自己執行完成后自己可以進行關閉的程序,否則數據庫中會一直進行循環。
第一種,簡單的執行外部exe程序:
數據庫某個表格中寫觸發器:
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程序。
第二種,外部程序需要傳入參數
這里用控制台應用程序,
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"};
程序中對參數進行操作即可。
