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语句.
试试这个,很优雅:)
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)
很容易包含在一个单独的WHERE条款中:
SELECT *
FROM Countries
WHERE Active = 1 AND (@CountryID = 0 OR CountryID = @CountryID)
Run Code Online (Sandbox Code Playgroud)