Вернуть вывод BCP в качестве сообщения от SQL Server 2012 (прочитано Matlab)

StackOverflow https://stackoverflow.com/questions/19843607

Вопрос

Я создаю таблицу в своей хранимой процедуре, экспортирует его контент с помощью BCP, а затем сбрасываю эту таблицу. Команда BCP выглядит так:

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

Как правило, если в процедуре хранилища есть ошибка, она напечатана как Message в SQL Server. Тем не менее, выход из BCP не печатается как сообщение. Так что я не могу захватить экземпляр ошибки в Matlab. Есть ли способ поймать строку error как показано ниже? Можно ли вернуть этот вывод как Message от SQL Server? enter image description here

Я не продвинутый программист SQL. Спасибо!

Это было полезно?

Решение

Ну, у вас есть вывод здесь, поэтому вы сможете захватить этот вывод, а затем вручную избавиться от ошибки.

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

В качестве альтернативы, если вы просто хотите сообщение, а не ошибку, вы сможете использовать печать для аналогичного эффекта.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top