条件WHERE语句SQL Server

Dav*_*vid 4 sql t-sql sql-server-2008

我想创建一个将返回所有Country行的SP,除非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
Run Code Online (Sandbox Code Playgroud)

谢谢

PS我认为可能有一种更好的方法,而不是简单地根据上述条件重复整个SELECT语句.

Ama*_*ure 9

试试这个,很优雅:)

 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
Run Code Online (Sandbox Code Playgroud)


Mat*_*ton 5

很容易包含在一个单独的WHERE条款中:

SELECT * 
FROM Countries 
WHERE Active = 1 AND (@CountryID = 0 OR CountryID = @CountryID)
Run Code Online (Sandbox Code Playgroud)