سؤال

أقوم بإنشاء جدول في الإجراء المخزن ، وتصدير محتواه باستخدام 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