我有一个参数为 NULL 作为默认值的 SP,然后我想做这样的查询:
SELECT ...
FROM ...
WHERE a.Blah = @Blah AND (a.VersionId = @VersionId OR (@VersionId IS NULL AND a.VersionId IS NULL));
Run Code Online (Sandbox Code Playgroud)
在WHERE
上述检查两个非空值和一个NULL值@VersionId
。
在性能方面,改为使用IF
语句并将查询复制到一个搜索非 NULL 的查询和另一个搜索 NULL 的查询中会不会更好?:
IF @VersionId IS NULL BEGIN
SELECT ...
FROM ...
WHERE a.Blah = @Blah AND a.VersionId IS NULL;
ELSE BEGIN
SELECT ...
FROM ...
WHERE a.Blah = @Blah AND a.VersionId = @VersionId;
END
Run Code Online (Sandbox Code Playgroud)
或者查询优化器使它本质上是一样的?
更新:
(注意:我使用的是 SQL Server)
(据我所知,a.VersionId = @VersionId
这两种情况都不能使用,是吗?)