SQL Server - Как переключаться между двумя возможными инструкциями SELECT - PullRequest
1 голос
/ 22 апреля 2010

Я бы хотел использовать параметр в моих хранимых процедурах mssql для переключения между маленьким и подробным результатом (для удобства обслуживания, производительности и загрузки сети).

Если параметр установлен в 1, я получаю все столбцы, иначе только один или два наиболее важных. Очень ограниченным образом это работает так:

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

Есть ли способ достичь чего-то подобного?

Ответы [ 3 ]

9 голосов
/ 22 апреля 2010

Я думаю, что это ужасный дизайн API, когда хранимая процедура возвращает разные типы записей на основе входной переменной.Я думаю, что вы должны создать две хранимые процедуры, GetAllUsers и GetAllUsersWithDetails.

5 голосов
/ 22 апреля 2010

Лично я бы использовал две разные хранимые процедуры. Нет смысла создавать сложную реализацию просто для того, чтобы заставить вещи помещаться внутри одной хранимой процедуры.

1 голос
/ 22 апреля 2010

Хотя я согласен с klausbyskov в том, что две процедуры - лучший дизайн, я все равно постараюсь ответить на ваш вопрос - и я боюсь, что краткий ответ нет .

Действительно возможно выполнить два разных оператора выбора (что и есть в вашем первом примере кода) в зависимости от значения переменной, но невозможно изменить проекция внутри одного оператора выбора таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...