SQL Server的条件WHERE语句
我想创建一个SP,它将返回所有SQL Server的条件WHERE语句,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我想创建一个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
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
多谢各位
另外,我认为可能有更好的方法,而不是简单地根据上述条件重复整个SELECT语句。这样做:
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)
试试这个,它很优雅:)
像这样的
SELECT *
FROM Countries
WHERE Active = 1
AND
(CountryID = @CountryID AND @CountryID <> 0) or (@CountryID = 0)
选择*
来自各国
其中活动=1
及
(CountryID=@CountryID和@CountryID 0)或(@CountryID=0)
因此,即使您有一个庞大的select语句,您也必须为附加条件重复整个过程?@David这更具可读性。如果你愿意,你可以选择一种更优雅的方式,就像其他答案一样。但是请记住,您可以重复select
,但只有一个是真的:PI没有声明我想要的东西,而不是重复select语句。无论如何,谢谢你。你的方法可能不“优雅”,但它确实是。啊,是的,当然。我看到了这一点,但感到困惑的是,它将与表CountryID匹配为0。太好了,谢谢
SELECT *
FROM Countries
WHERE Active = 1
AND
(CountryID = @CountryID AND @CountryID <> 0) or (@CountryID = 0)