有条件的WHERE语句SQL Server
问题描述:
我想创建一个SP,它将返回所有Country
行,除非提供了一个CountryID
作为参数。这是我想象它可能会起作用的方式,但它不喜欢它。有条件的WHERE语句SQL Server
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
谢谢
附:我认为可能有比根据上述条件重复整个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
答
做这样的:
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
答
很容易在单个WHERE
条款包裹起来:
SELECT *
FROM Countries
WHERE Active = 1 AND (@CountryID = 0 OR CountryID = @CountryID)
+0
+1我也得到了同样的答案:) – 2012-02-02 10:40:43
答
喜欢的东西这个?
SELECT *
FROM Countries
WHERE Active = 1
AND
(CountryID = @CountryID AND @CountryID <> 0) or (@CountryID = 0)
嗯,当然。我看到了这个,但感到困惑,它会匹配表CountryID为0.完美,谢谢 – David 2012-02-02 10:42:18
很高兴为你工作。 – 2012-02-02 10:45:04