Условный оператор WHERE SQL Server - PullRequest
4 голосов
/ 02 февраля 2012

Я хотел бы создать SP, который будет возвращать все Country строки, если CountryID не предоставлено в качестве параметра.Вот как я представлял, что это может работать, но это не нравится.

ALTER PROCEDURE [dbo].[usp_return_countries]
    @CountryID AS INT = 0
AS
BEGIN
        SELECT *
        FROM Countries
        WHERE Active = 1

        IF @CountryID > 0 BEGIN
            AND @CountryID = CountryID
        END

END

Спасибо

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

Ответы [ 4 ]

9 голосов
/ 02 февраля 2012

Попробуйте, это элегантно:)

 ALTER PROCEDURE [dbo].[usp_return_countries]
   @CountryID AS INT = 0
 AS
 BEGIN

    SELECT *
    FROM Countries
    WHERE Active = 1
    AND (@CountryID = 0 OR @CountryID = CountryID)

 END
5 голосов
/ 02 февраля 2012

Достаточно легко обернуть в один WHERE пункт:

SELECT * 
FROM Countries 
WHERE Active = 1 AND (@CountryID = 0 OR CountryID = @CountryID)
4 голосов
/ 02 февраля 2012

Сделай так:

ALTER PROCEDURE [dbo].[usp_return_countries]
    @CountryID AS INT = 0 AS BEGIN

        IF @CountryID > 0 BEGIN
            SELECT *
            FROM Countries
            WHERE Active = 1
            AND @CountryID = CountryID
        END
        ELSE BEGIN
            SELECT *
            FROM Countries
            WHERE Active = 1
        END

END
2 голосов
/ 02 февраля 2012

Как то так?

SELECT *
        FROM Countries
        WHERE Active = 1
AND
    (CountryID = @CountryID AND @CountryID <> 0) or (@CountryID = 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...