2010-09-22 67 views
0
捕獲錯誤消息

我運行下面的命令:從XP_CMDSHELL

EXEC @ReturnCode = master.dbo.xp_cmdshell @cmdline

在結果選項卡上,我得到2線 找不到的一部分路徑'\ server \ directory \ filename'。 NULL

如何捕獲錯誤消息中的第一行?我嘗試使用「SELECT @ErrorMessage = ERROR_MESSAGE()」的Try Catch塊,它不抓住它。

該消息不是來自sys.messages。這個錯誤消息來自哪裏?

回答

2

的錯誤出現在命令行本身,它不是一個SQL Server錯誤搶錯誤

一種方法是

declare @cmdline varchar(500),@ReturnCode int 
select @cmdline = 'dir f:' 

create table #temp (SomeCol varchar(500)) 


insert #temp 
EXEC @ReturnCode = master.dbo.xp_cmdshell @cmdline 

if @ReturnCode <> 0 
select * from #temp 
where SomeCol is not null 

但當然,如果你這樣做DIR C:表會填寫所有文件和文件夾從該命令

+0

謝謝@SQLMenace! – Toby 2012-08-14 12:10:45

+0

使用這種技術,我可以禁止調用xp_cmdshell的任何輸出。 我遇到了問題,我總是得到一個結果集,其中包含一個名爲output的列和一個只包含null的行 - 無論調用成功還是失敗。現在我使用#temp表格作爲黑洞:插入它,但從未選擇它,因爲我只是不關心輸出。再次感謝! – Toby 2012-08-14 12:17:26