我试图让一个SQL查询使用(如果设置了)一个参数来获取表的特定id,否则,如果它不是set..then来执行where子句(如下面的示例所示)
Declare @projectId varchar(255) = '31DEC523-1234-1234-1234-0E6D5CFEC249'
select * from projects where projects.id = @projectId
select * from projects where projects.id in (select top 2 id from projects)如何将上述内容加入到单个查询中?
我尝试了一个类似于there..but的50%的版本,我不知道如何在(SELECT)中执行可选的操作
Declare @projectId varchar(255) = '31DEC523-F19A-4B13-A73C-0E6D5CFEC249'
select * from projects
WHERE
projects.id LIKE @projectId+'%'
OR @projectId IS NULL发布于 2021-03-19 18:39:22
未经测试:
select * from projects
WHERE
projects.id LIKE @projectId+'%'
OR (@projectId IS NULL
AND projects.id IN (select top 2 id from projects)正如戈登在他的回答中所写的那样,一个Order By id会有很多意义。
发布于 2021-03-19 18:35:22
您只需将top (2)添加到查询:
select top (2) p.*
from projects p
where p.id LIKE @projectId + '%' or @projectId IS NULL;这假设like返回一行(或至少不超过2)。
如果可以,那么union all可能是最简单的:
select p.*
from projects p
where p.id like @projectId + '%'
union all
select top (2) p.*
from projects p
where @projectId is null;请注意,这将返回两个任意项目ids -就像查询一样。如果您想要两个特定的,那么使用一个order by。
这也使得假设id在projects中是独一无二的--这似乎是一个非常合理的假设。
https://stackoverflow.com/questions/66713867
复制相似问题