Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态SQL Where语句_Sql - Fatal编程技术网

动态SQL Where语句

动态SQL Where语句,sql,Sql,我尝试使用一个SQL查询,该查询将使用(如果已设置)一个参数来获取表的特定id,否则,如果未设置该参数,则执行where in子句(如下例) 如何将上述内容合并到一个查询中 我已经尝试了下面的一个版本,大约有50%是这样的。但是我不知道如何在(选择)中执行可选操作 您可以将top(2)添加到查询中: select top (2) p.* from projects p where p.id LIKE @projectId + '%' or @projectId IS NULL; 这假设like

我尝试使用一个SQL查询,该查询将使用(如果已设置)一个参数来获取表的特定id,否则,如果未设置该参数,则执行where in子句(如下例)

如何将上述内容合并到一个查询中

我已经尝试了下面的一个版本,大约有50%是这样的。但是我不知道如何在(选择)中执行可选操作


您可以将
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;
注意,这将返回两个任意的项目ID——就像您的查询一样。如果您想要两个特定的,则使用一个
订购人

这些假设也使得
id
项目中是唯一的,这似乎是一个非常合理的假设。

未经测试:

select * from projects 
WHERE  
projects.id LIKE @projectId+'%'
OR  (@projectId IS NULL 
     AND projects.id IN (select top 2 id from projects)

就像Gordon在他的回答中所写的那样,
按id排序
会很有意义。

用你正在使用的数据库标记你的问题。猜测它是Microsoft SQL Server,因为使用
+
进行字符串连接,而且许多Microsoft用户倾向于使用。
select p.*
from projects p
where p.id like @projectId + '%'
union all
select top (2) p.*
from projects p
where @projectId is null;
select * from projects 
WHERE  
projects.id LIKE @projectId+'%'
OR  (@projectId IS NULL 
     AND projects.id IN (select top 2 id from projects)