パラメータ値を持つ句によって、SQL Serverの発注
-
23-09-2019 - |
質問
私は、ストアドプロシージャ、次の書かれています。 by句ELSEブロックの順序は罰金を動作する場合、私は使用しませんが、私はELSE IF私のselect文を構築するために使用する必要がある場合。ある順は、IF elseブロックでの作業ではありません。あなたは私が間違ってやっているものを私に教えてくださいことはできますか? 事前に感謝します!
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
解決
@LookupTypeIdがそうでなければRLT.Valueで@MonthTypeに等しいとするとき、
RLT.Idによって順番にあなたがしたいですか?そして、ケースは次のようにする必要があります:
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
所属していません StackOverflow