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程式:
資料庫某個**中寫觸發器:
1use [dt_teststep]2go
34set ansi_nulls on5go
67set quoted_identifier on8go
910create trigger [dbo].[tritest]
11on [dbo].[tb_test]
12 for update --更改資料觸發(insert、delete)
13as
14begin
15 exec master..xp_cmdshell '
d:\debug\test.exe'16
17set nocount on;
1819
20end
21 go
當**tb_test中資料更新修改時就會觸發外部的exe程式。
第二種,外部程式需要傳入引數
這裡用控制台應用程式,
staticvoid main(string args){}
其中args為exe程式接收的傳入的引數。
資料庫中的觸發器寫法如下:
use [dt_teststep]goset ansi_nulls on
goset quoted_identifier on
gocreate trigger [dbo].[tritest]
on [dbo].[tb_test]
for update
asbegin
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
endgo
與第一種不同的是,帶有引數,外部程式呼叫時改為先啟動cmd,然後在進行exe的執行。
其中,引數1作為測試,宣告變數,引數2 為直接寫入的引數。
在exe程式中接收的引數就是string args=;
程式中對引數進行操作即可。
資料庫應用 Sqlserver觸發器
下面講在sql sever2000 sybase資料為里設定觸發器的指令碼例項 sql sever2000和sybase的儲存語句是相同的 題目要求 表1和表2的主鍵都是xjh 學籍號 當表1新增,刪除,或者修改資料時,表2自動更新,請用觸發器實現它們?答案 建議在資料庫管理中心直接執行ddl的sq...
Sql Server資料庫觸發器例項講解
定義 何為觸發器?在sql server裡面也就是對某乙個表的一定的操作,觸發某種條件,從而執行的一段程式。觸發器是乙個特殊的儲存過程。常見的觸發器有三種 分別應用於insert update delete 事件。sql server 2000定義了新的觸發器,這裡不提 我為什麼要使用觸發器?比如,...
Sql Server資料庫觸發器例項講解
別處轉的 定義 何為觸發器?在sql server裡面也就是對某乙個表的一定的操作,觸發某種條件,從而執行的一段程式。觸發器是乙個特殊的儲存過程。常見的觸發器有三種 分別應用於insert update delete 事件。sql server 2000定義了新的觸發器,這裡不提 我為什麼要使用觸發...