Pregunta

Creo una tabla en mi procedimiento almacenado, exporto su contenido usando BCP y luego dejo esta tabla. El comando BCP se ve como:

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

Por lo general, si hay un error en el procedimiento de la tienda, se imprime como un Message en SQL Server. Sin embargo, la salida de BCP no se imprime como un mensaje. Así que no puedo capturar la instancia de error en MATLAB. ¿Hay alguna forma de atrapar la cuerda? error ¿Como se muestra abajo? ¿Se puede devolver esta salida como un Message ¿Desde SQL Server? enter image description here

No soy un programador SQL avanzado. ¡Gracias!

¿Fue útil?

Solución

Bueno, tiene salida aquí, por lo que debería poder capturar esa salida y luego forzar manualmente un error.

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

Alternativamente, si solo desea un mensaje y no un error, debería poder usar la impresión para un efecto similar.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top