创建动态SQL查询查询

时间:2020-02-09 05:25:57

标签: sql sql-server

我需要创建一个SQL查询以从表中返回数据并在where中使用条件,但是在没有固定条件的情况下(可能条件有2或3个参数),我想避免使用{ {1}}。我想使用一种更好更清洁的方法来解决它。

这是我的查询:

IF @PARAMETER >0

我该如何解决这个问题?

2 个答案:

答案 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