gpt4 book ai didi

SQL 服务器 Where 子句变量可能为空

转载 作者:行者123 更新时间:2023-12-04 01:48:00 26 4
gpt4 key购买 nike

我有以下查询(SQL 服务器):

DECLARE @UserId INT;
SET @UserId = //... set by dynamic variable

SELECT *
FROM Users
WHERE userId = @UserId

我的问题是,如果 @UserId为 null 查询将无法正确评估。

如果变量为空或不为空,我如何编写此查询以正确评估?

编辑:

有很多建议使用以下内容:
WHERE (@UserId IS NULL OR userId = @UserId)

或类似。

在这种情况下,如果有一个包含 3 个条目的表,userId 为 1,2 和 3,变量“@UserId”为 NULL,则此查询将返回所有 3 个条目。我真正需要它返回的是没有条目,因为它们都没有 NULL 的 userId

最佳答案

您需要使用 OR :

DECLARE @UserId INT;
SET @UserId = //... set by dynamic variable

SELECT *
FROM Users
WHERE (userId = @UserId OR @UserId IS NULL);

但是,如果您在存储过程中编写此代码、大量重用此代码或添加更多 NULLable 参数,则这很可能会产生(严重的)性能问题。如果是这样,请包括 OPTION (RECOMPILE)在您的查询中,以便每次运行时生成查询计划。这将使用生成的具有不同 NULL 集的查询计划停止数据引擎。参数。

编辑:OP 不清楚他们的问题。他们不想传递值 NULL@UserID并返回所有行,他们想通过 NULL并在 UserID 处获取行值为 NULL .那将是:
SELECT *
FROM Users
WHERE UserID = @UserID
OR (UserID IS NULL AND @UserID IS NULL);

关于SQL 服务器 Where 子句变量可能为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54457674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com