处理null参数的存储过程

Nel*_*mel 2 sql-server null

我确信这有一个非常简单的答案我没有找到...我在数据库中有一个简单的层次结构,其中每一行都有一个ParentId.如果ParentId IS NULL,则它是根元素.我有存储过程:

CREATE PROCEDURE GetByParent @parentId int
AS BEGIN SELECT * FROM TABLE1 WHERE ParentId = @parentId END
Run Code Online (Sandbox Code Playgroud)

如果我发送一个整数,它工作正常,但如果我发送NULL它变成ParentId = NULL,这在ANSI中不起作用.我知道有COALESCE(@parentId, ParentId),但是返回所有行时@parentId IS NULL.我可以做一个IF ELSE语句并复制查询(一个= @parentId和另一个IS NULL),但我确信有更好的方法.

Tob*_*oby 6

在单独的条件中处理NULL情况:

SELECT *
FROM TABLE1
WHERE ParentId = @parentId
    OR (ParentId IS NULL AND @parentId IS NULL)
Run Code Online (Sandbox Code Playgroud)