Frage

Ich erstelle eine Tabelle in meiner gespeicherten Prozedur, exportiere seinen Inhalt mit BCP und lasse diese Tabelle dann fallen. BCP -Befehl sieht aus wie:

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

Normalerweise wird es als Fehler in der Store -Prozedur vorliegt, es wird als a gedruckt Message In SQL Server. Die Ausgabe von BCP wird jedoch nicht als Nachricht gedruckt. Daher kann ich die Fehlerinstanz in Matlab nicht erfassen. Gibt es eine Möglichkeit, die Schnur zu fangen? error Wie nachfolgend dargestellt? Kann diese Ausgabe als zurückgegeben werden Message vom SQL Server? enter image description here

Ich bin kein erweiterter SQL -Programmierer. Vielen Dank!

War es hilfreich?

Lösung

Nun, Sie haben hier ausgegeben, damit Sie in der Lage sein sollten, diese Ausgabe zu erfassen und dann einen Fehler manuell aus ihm zu erzwingen.

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

Alternativ, wenn Sie nur eine Nachricht und keinen Fehler wünschen, sollten Sie in der Lage sein, Print für einen ähnlichen Effekt zu verwenden.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top