سؤال

في إجراء مخزن, أنا أحاول اختبار إذا كانت المعلمة فارغة أو أقل ثم 1 ، إذا رفع خطأ مع رسالة ودية و قيمة المعلمة.

هنا هو بلدي رمز:

IF @ID IS NULL OR @ID <= 0
BEGIN
    RAISERROR 27001 'ID is ?????. ID cannot be null or less then zero.'
    RETURN 27001
END

ما أود العودة هو إما:

"معرف 0.معرف لا يمكن أن تكون فارغة أو أقل من الصفر." أو "معرف باطل.معرف لا يمكن أن تكون فارغة أو أقل من الصفر."

لقد حاولت بناء varchar ورفع مثل هذا الخطأ:

RAISERROR 27001 @message

ولكن الذي ينتج الخطأ "رسالة رقم 27001 ، مرت إلى RAISERROR ، لا وجود لها في sysmessages الكتالوج."

هل كانت مفيدة؟

المحلول 2

وهذا يعمل، على الرغم من أن قيمةID من NULL يكتب بها باعتبارها سلسلة فارغة.

IF @ID IS NULL OR @ID <= 0
BEGIN

    DECLARE @msg varchar(250)
    SELECT @msg = 'ID is ' +  Convert(varchar(15), @ID) + '. Value cannot be null or less then zero'

    RAISERROR 27001 @msg
    RETURN 27001
END

نصائح أخرى

المشكلة هي:تحتاج إلى إضافة المخصصة الخاصة بك خطأ # في قاعدة البيانات عن طريق الاتصال sp_addmessage:

sp_addmessage 27001, "ID is %1. ID cannot be null or less than zero."

ثم يمكنك استدعاء RAISERROR مثل لديك أعلاه أو مثل هذا (إذا كنت ترغب في استخدام الرسالة سلسلة المعرفة في sp_addmessage):

RAISERROR 27001, @ID

تحرير:(معالجة التعليق)

أولا, إذا كنت تميل ذلك فقط سجل 27001 مع الموضعية حجة الرسالة:

sp_addmessage 27001, "%1"

ثانيا أنت لا يضطر إلى العرض الافتراضي الرسالة التي كنت قد سجلت باستخدام sp_addmessage;مثل هذا يجب عرض رسالة منفصلة بغض النظر عن الرسالة الافتراضي هو:

RAISERROR 27001 @message
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top