Ну, у вас есть вывод здесь, поэтому вы сможете захватить этот вывод, а затем вручную избавиться от ошибки.
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
В качестве альтернативы, если вы просто хотите сообщение, а не ошибку, вы сможете использовать печать для аналогичного эффекта.