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


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

程序中對參數進行操作即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM