首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态SQL语句

动态SQL语句
EN

Stack Overflow用户
提问于 2021-03-19 18:33:13
回答 2查看 47关注 0票数 1

我试图让一个SQL查询使用(如果设置了)一个参数来获取表的特定id,否则,如果它不是set..then来执行where子句(如下面的示例所示)

代码语言:javascript
复制
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)中执行可选的操作

代码语言:javascript
复制
Declare @projectId varchar(255) = '31DEC523-F19A-4B13-A73C-0E6D5CFEC249'

select * from projects 
WHERE  
projects.id LIKE @projectId+'%'
OR      @projectId IS NULL
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-19 18:39:22

未经测试:

代码语言:javascript
复制
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会有很多意义。

票数 1
EN

Stack Overflow用户

发布于 2021-03-19 18:35:22

您只需将top (2)添加到查询:

代码语言:javascript
复制
select top (2) p.*
from projects p
where p.id LIKE @projectId + '%' or @projectId IS NULL;

这假设like返回一行(或至少不超过2)。

如果可以,那么union all可能是最简单的:

代码语言:javascript
复制
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

这也使得假设idprojects中是独一无二的--这似乎是一个非常合理的假设。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66713867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档