1

mssqlストアドプロシージャのパラメータを使用して、小さな結果と詳細な結果を切り替えたいと思います(保守性、パフォーマンス、およびネットワーク負荷の理由から)。

パラメータが1に設定されている場合、すべての列を取得します。それ以外の場合、最も重要なのは1つまたは2つだけです。非常に限られた方法で、次のように機能します。

ALTER PROCEDURE [dbo].[GetAllUsers]
 @detail BIT
AS
 IF @detail = 1 SELECT UserName, Title, UserID FROM Users
 ELSE SELECT Username FROM Users

しかし、WHEN句を組み合わせて使用​​したいと思います。以下は私が試したものですが、これは機能しません。

ALTER PROCEDURE [dbo].[GetAllUsers]
 @detail BIT
AS
 CASE @detail
    WHEN 1 THEN SELECT UserName, Title, UserID
    ELSE SELECT UserName END
    FROM Users
    WHERE UserID < 5

そのような何かを達成する方法はありますか?

4

3 に答える 3

9

ストアドプロシージャが入力変数に基づいて異なるレコードタイプを返すようにするのはひどいAPI設計だと思います。GetAllUsers2つのストアドプロシージャを作成する必要があると思いますGetAllUsersWithDetails

于 2010-04-22T13:39:13.483 に答える
5

個人的には、2つの異なるストアドプロシージャを使用します。単純に1つのストアドプロシージャ内に収まるように複雑な実装を作成する理由はありません。

于 2010-04-22T13:39:15.463 に答える
1

私はクラウスビスコフに2つの手順がより良い設計であることに同意しますが、とにかくあなたの質問に答えようとします-そして私は短い答えがノーであることを恐れています。

変数の値に応じて、 2つの異なるselectステートメント(最初のコードサンプルにあるもの)を実行することは確かに可能ですが、この方法で単一のselectステートメント内の射影を変更することはできません。

于 2010-04-22T13:45:33.267 に答える