Question

Je crée une table dans ma procédure stockée, exporte son contenu à l'aide de BCP, puis dépose ce tableau. La commande BCP ressemble:

SET @sqlop = 'BCP "SELECT blah FROM MYTABLE" queryout "' + @txt4print* 
             + '" -b 50000 -c -t"," -S"server" -U"uname" -P"pswd"'
exec master..xp_cmdshell @sqlop       --, NO_OUTPUT

En règle générale, s'il y a une erreur dans la procédure du magasin, il est imprimé comme un Message dans SQL Server. Cependant, la sortie de BCP n'est pas imprimée en tant que message. Je ne suis donc pas en mesure de capturer l'instance d'erreur dans MATLAB. Y a-t-il un moyen d'attraper la chaîne error comme indiqué ci-dessous? Cette sortie peut-elle être renvoyée comme un Message De SQL Server? enter image description here

Je ne suis pas un programmeur SQL avancé. Merci!

Était-ce utile?

La solution

Eh bien, vous avez la sortie ici, vous devriez donc pouvoir capturer cette sortie, puis en forcer manuellement une erreur.

DECLARE @Output TABLE (OutputMessage NVARCHAR(4000));

SET @sqlop = 'BCP "SELECT blah FROM MYTABLE" queryout "' + @txt4print* 
             + '" -b 50000 -c -t"," -S"server" -U"uname" -P"pswd"'

INSERT INTO @Output
exec master..xp_cmdshell @sqlop       --, NO_OUTPUT

DELETE FROM @Output WHERE OutputMessage IS NULL

DECLARE @Statement NVARCHAR(MAX)

WHILE (SELECT COUNT(*) FROM @Output) > 0
BEGIN
    SELECT TOP 1 @Statement = OutputMessage FROM @Output
    IF @Statement LIKE '%Error%'
    BEGIN
      SET @Statement = 'Unexpected error in procedure: ' + @Statement
      RAISERROR(@Statement, 16, 1)
    END
END

Alternativement, si vous voulez juste un message et non une erreur, vous devriez pouvoir utiliser l'impression pour un effet similaire.

http://technet.microsoft.com/en-us/library/ms176047.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top