سؤال

لقد كتبت الإجراءات المخزنة التالية. إذا لم أستخدم Else Block Order by Call ، فأنا بحاجة إلى استخدامه إذا كان لإنشاء عبارة SELECT الخاصة بي. النظام من قبل لا يعمل مع IF كتلة أخرى. هل يمكنك أن تخبرني من فضلك ماذا أفعل خطأ؟ شكرا لك مقدما!

ALTER PROCEDURE [dbo].[GetLookupItem] 

-- #description Gets LookupItem 
-- #tables   Subscriber.Reference.LookupItem,Subscriber.Reference.LookupText,Subscriber.Reference.LookupType
-- #parameter:   @LookupTypeId       This parameter defines a type of lookup
-- #parameter:   @LookupTextAbbreviationId            This Variable decides to tie Lookup Text to Abbreviation or Full Text. Most of the cases Full text will be used.
-- #parameter:   @LanguageCode     To show the Lookup Text in this Language

 @LookupTypeId int,
 @LookupTextAbbreviationId int ,
 @LanguageCode varchar(5)


AS

BEGIN

 SET NOCOUNT ON;
 DECLARE @MonthType int
 SET @MonthType = (SELECT Id FROM Subscriber.Reference.LookupType WHERE Name = 'Months')

 IF  @LookupTextAbbreviationId IS NULL
  BEGIN
   SELECT RLI.Id,RLT.Value
   FROM Subscriber.Reference.LookupItem RLI
   INNER JOIN Subscriber.Reference.LookupText RLT
   ON RLI.LookupTextId = RLT.Id AND RLT.LanguageCode = @LanguageCode AND RLI.LookupTextAbbreviationId IS NULL   -- LookupTextAbbreviationId will be null for full text records in Subscriber.Reference.LookupItem
   WHERE RLI.LookupTypeId = @LookupTypeId 
  END
 ELSE

  SELECT RLI.Id,RLT.Value
  FROM Subscriber.Reference.LookupItem RLI
  INNER JOIN Subscriber.Reference.LookupText RLT
  ON RLI.LookupTextAbbreviationId = RLT.Id AND RLT.LanguageCode = @LanguageCode
  WHERE RLI.LookupTypeId = @LookupTypeId


        ORDER BY                -- Order by will change for only Months by ID
        CASE  @LookupTypeId 
   WHEN @MonthType THEN RLT.Id 
   END,
  CASE 
   WHEN @LookupTypeId <> @MonthType THEN RLT.Value 
  END

 IF (@@ERROR <> 0)
  RETURN 1
 ELSE
  RETURN 0  

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

المحلول

هل ترغب في طلب RLT.ID عندما يساوي @lookuptypeid monthtype و RLT.Value خلاف ذلك؟ ثم يجب أن تكون القضية هكذا:

ORDER BY
CASE @LookupTypeId 
   WHEN @MonthType THEN RLT.Id
   ELSE RLT.Value
END

ومع ذلك ، إذا كان RLT.ID و RLT.VALUE ليسا نفس النوع ، فستحصل على خطأ في التحويل. إذا كان rlt.id int و rlt.value هو varchar ، فيمكنك تغيير الحالة إلى:

ORDER BY
CASE @LookupTypeId 
   WHEN @MonthType THEN STR(RLT.Id)
   ELSE RLT.Value
END

نصائح أخرى

أعتقد أن طلبك بواسطة بناء الجملة تم خلطه - هل يعمل هذا الاستعلام؟ أم أنه يعطي خطأ في بناء الجملة؟

هل هذا ما كنت تبحث عنه؟

ORDER BY  -- Order by will change for only Months by ID 
  CASE  @LookupTypeId  
    WHEN @MonthType THEN RLT.Id  
    ELSE RLT.Value  
  END
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top