2010-09-22 5 views
0

Je suis en cours d'exécution de la commande suivante:Attraper Message d'erreur de XP_CMDSHELL

EXEC @ReturnCode = master.dbo.xp_cmdshell @cmdline

Sur l'onglet Résultats je reçois 2 lignes Impossible de trouver une partie de la chemin '\ serveur \ répertoire \ nom de fichier'. NULL

Comment capturer la première ligne d'un message d'erreur? J'ai essayé d'utiliser un bloc Try Catch avec "SELECT @ErrorMessage = ERROR_MESSAGE()" et il ne l'attrape pas.

Le message ne provient pas de sys.messages. D'où vient ce message d'erreur?

Répondre

2

L'erreur provient de l'interpréteur de commandes lui-même, il est pas une erreur SQL Server

une façon de saisir l'erreur est

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 

mais bien sûr, si vous DIR C: La table être rempli avec tous les fichiers et dossiers de cette commande

+0

Merci @SQLMenace! – Toby

+0

Avec cette technique, j'étais capable de supprimer toute sortie de l'appel à xp_cmdshell. J'ai eu le problème que j'ai toujours un ensemble de résultats avec une colonne appelée sortie et une ligne qui contient juste null - indépendamment du fait que l'appel a réussi ou échoué. Maintenant, j'utilise la table #temp comme un trou noir: insérez-y, mais n'en sélectionnez jamais, car je ne me soucie pas de la sortie. Merci encore! – Toby