2017-05-03 92 views
0

我試圖使用SQL triggers運行存儲在D:\驅動器中的.bat文件。
當某個操作發生在表中時,需要觸發此觸發器並且必須執行批處理文件。 因爲我已經創建了一個示例觸發器。如何運行批處理文件(.Bat)使用SQL觸發器

Create TRIGGER [dbo].[TestBatch] ON [dbo].[RawMaterial] 
FOR UPDATE 
AS 
DECLARE @PassedVariable VARCHAR(100) 
DECLARE @CMDSQL VARCHAR(1000) 
begin 
--SET @PassedVariable = 'SqlAuthority.com' 
SET @CMDSQL = 'D:\AutoServer.bat'-- + @PassedVariable 
EXEC master..xp_CMDShell @CMDSQL 
end 

但我沒有得到正確的輸出。當我運行上面的腳本時,它給出了一些錯誤消息說。

"The device is not ready. NULL"

我會請求所有給我一個解決我的上述問題。 在此先感謝。

+2

不要這樣做。使用xp_cmdshell運行批處理文件可能會出現很多錯誤,當它們出錯時,觸發器會阻止/回滾/錯誤更改數據庫。你應該改爲實施一個排隊系統。您觸發對隊列表的寫入,並且單獨的進程將記錄從隊列中取出並運行批處理文件。通過這種方式,您可以從批處理文件中分離數據庫更改。 –

+2

關於你的錯誤:你確定所有你期望的驅動器都在那裏嗎?你的SQL Server上有一個D驅動器嗎?請記住,xp_cmdshell在SQL Server上運行,而不是在客戶端上,它(通常)將它們作爲SQL Server服務運行 –

回答

1

在桌面上運行bat文件不是一個好主意,它可能會非常成問題,具體取決於您的bat文件正在做什麼以及需要執行多少操作。此外,觸發表觸發的頻率也會加劇問題。 更好的方式是將影響到觸發記錄的表格存儲到另一個帶有處理標誌的單獨表格中,並通過SQL計劃作業定期運行bat文件,一旦通過bat文件處理記錄,會將處理標誌翻轉爲true。

相關問題