0

我在存储过程中创建了一个表,使用 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 中打印为 a。但是,BCP 的输出不会作为消息打印。所以我无法在 MATLAB 中捕获错误实例。有没有办法捕获字符串error,如下所示?此输出是否可以Message从 SQL Server 返回? 在此处输入图像描述

我不是高级 SQL 程序员。谢谢!

4

1 回答 1

1

好吧,您在这里有输出,因此您应该能够捕获该输出,然后手动从中强制出错。

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

或者,如果您只想要一条消息而不是错误,您应该能够使用 PRINT 来获得类似的效果。

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

于 2013-11-07T19:27:25.517 回答