我需要创建一个SQL查询以从表中返回数据并在where
中使用条件,但是在没有固定条件的情况下(可能条件有2或3个参数),我想避免使用{ {1}}。我想使用一种更好更清洁的方法来解决它。
这是我的查询:
IF @PARAMETER >0
我该如何解决这个问题?
答案 0 :(得分:1)
您可以使用COALESCE
来使参数等于要与之比较的列NULL
,以便如果您通过NULL
作为参数值,则测试通过。例如:
SELECT
firstName,
lastName,
email
FROM [USERS]
WHERE id=COALESCE(@p4,id) AND firstName=COALESCE(@p2,firstName)
因此,在调用过程并希望获取所有John
时,无论使用什么id
,
GetAllUsers('somevalue' , 'John' , 'someothervalue' , NULL)
答案 1 :(得分:0)
您可以将NULL
传递给不需要的参数,并按如下所示编写查询。
SELECT firstName, lastName, email
FROM [USERS]
WHERE (
@p4 IS NULL
OR id = @p4
)
AND (
@p2 IS NULL
OR firstName = @p2
)
类似地,您可以通过添加其他参数来构建查询。
注意:CREATE PROCEDURE
的语法不正确,您需要提及参数的数据类型。
您还可以将默认值用作参数。最终的SP应该如下所示
CREATE PROCEDURE GetAllUsers (
@p1 INT = NULL
,@p2 VARCHAR(100) = NULL
,@p3 VARCHAR(100) = NULL
,@p4 VARCHAR(100) = NULL
)
AS
BEGIN
SELECT firstName
,lastName
,email
FROM [USERS]
WHERE (
@p4 IS NULL
OR id = @p4
)
AND (
@p2 IS NULL
OR firstName = @p2
)
--Add remaining conditions
END