Domanda

Creo una tabella nella mia procedura memorizzata, esporta il suo contenuto utilizzando BCP e quindi abbandoni questa tabella. Il comando BCP sembra:

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

In genere, se si verifica un errore nella procedura di archivio, è stampato come a Message in SQL Server. Tuttavia, l'output di BCP non è stampato come messaggio. Quindi non sono in grado di catturare l'istanza di errore in Matlab. C'è un modo per catturare la stringa error come mostrato di seguito? Questo output può essere restituito come a Message da SQL Server? enter image description here

Non sono un programmatore SQL avanzato. Grazie!

È stato utile?

Soluzione

Bene, hai un output qui, quindi dovresti essere in grado di catturare tale output e quindi forzare manualmente un errore da esso.

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

In alternativa, se desideri solo un messaggio e non un errore, dovresti essere in grado di utilizzare la stampa per un effetto simile.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top