Pergunta

Crio uma tabela no meu procedimento armazenado, exporto seu conteúdo usando o BCP e depois solto esta tabela. O comando BCP se parece:

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

Normalmente, se houver um erro no procedimento da loja, ele é impresso como um Message no servidor SQL. No entanto, a saída do BCP não é impressa como uma mensagem. Portanto, não consigo capturar a instância de erro no Matlab. Existe uma maneira de pegar a corda error como mostrado abaixo? Esta saída pode ser retornada como um Message do servidor SQL? enter image description here

Não sou um programador SQL avançado. Obrigado!

Foi útil?

Solução

Bem, você tem saída aqui para poder capturar essa saída e forçar manualmente um erro dele.

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

Como alternativa, se você quiser apenas uma mensagem e não um erro, poderá usar o impressão para obter um efeito semelhante.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top