我正在通過存儲過程進行集成工作。所以當我遇到錯誤時,我需要將我的文件傳輸到某個位置。如何在存儲過程中執行批處理腳本?
我有一個Windows批處理文件,我需要使用存儲過程來執行該批處理文件,這意味着我需要在該存儲過程中使用查詢來執行該批處理文件。任何建議?
我正在通過存儲過程進行集成工作。所以當我遇到錯誤時,我需要將我的文件傳輸到某個位置。如何在存儲過程中執行批處理腳本?
我有一個Windows批處理文件,我需要使用存儲過程來執行該批處理文件,這意味着我需要在該存儲過程中使用查詢來執行該批處理文件。任何建議?
您可以使用xp_cmdshell
,例如, xp_cmdshell 'dir *.*'
也許你需要激活SP:
-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO
此:
exec master..xp_cmdshell 'c:\path\file.bat'
應該xp_cmdshell的啓動就好了,只要工作,按照奧卡索的代碼。當然xp_cmdshell是一個可怕的小野獸,只有在所有其他選項都用盡的情況下才能啓用它。考慮這一點非常可怕的批處理文件,是否存在:
@ECHO OFF
REM Database info
REM User must have xp_cmdshell exec privileges
SET "user=username"
SET "pass=password"
set "servername=192.168.1.100"
set "database=database_name"
IF EXIST thiscmd.sql DEL /F /Q thiscmd.sql
ECHO SET NOCOUNT ON > thiscmd.sql
ECHO create table #result (outputrow varchar(200)) >> thiscmd.sql
ECHO Insert into #result >> thiscmd.sql
ECHO exec master..xp_cmdshell '%~1' >> thiscmd.sql
ECHO declare @thisline varchar(200) >> thiscmd.sql
ECHO declare output_cursor CURSOR FOR >> thiscmd.sql
ECHO select * from #result >> thiscmd.sql
ECHO OPEN output_cursor >> thiscmd.sql
ECHO FETCH NEXT FROM output_cursor into @thisline >> thiscmd.sql
ECHO WHILE @@FETCH_STATUS = 0 >> thiscmd.sql
ECHO BEGIN >> thiscmd.sql
ECHO print @thisline >> thiscmd.sql
ECHO FETCH NEXT FROM output_cursor into @thisline >> thiscmd.sql
ECHO END >> thiscmd.sql
ECHO CLOSE output_cursor >> thiscmd.sql
ECHO DEALLOCATE output_cursor >> thiscmd.sql
ECHO drop table #result >> thiscmd.sql
.\osql -n -U%user% -P%pass% -S%servername% -d%database% -w200 -i thiscmd.sql
IF EXIST thiscmd.sql DEL /F /Q thiscmd.sql
假設所提供的用戶名和密碼的xp_cmdshell訪問,該批處理文件基本上是給你一個遠程命令提示符下運行的任何用戶擁有SQL服務。這意味着如果有人妥協了一個SQL用戶,他們已經損害了整個服務器。我有類似的批處理文件,可以自動執行net命令來回移動文件,我保證任何值得他/她的鹽的攻擊者也會這樣做。
TL; DR:小心使用! xp_cmdshell是危險的。