Estoy tratando de tener una única consulta SQL que use (si está configurado) un parámetro para obtener una identificación específica de una tabla; de lo contrario, si NO está configurada... entonces hacer una cláusula donde en (como en el ejemplo siguiente). )
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)
¿Cómo puedo unir lo anterior en una sola consulta?
He probado una versión de lo siguiente que es como el 50% del camino... pero no puedo entender cómo hacer lo opcional en (SELECCIONAR)
Declare @projectId varchar(255) = '31DEC523-F19A-4B13-A73C-0E6D5CFEC249'
select * from projects
WHERE
projects.id LIKE @projectId+'%'
OR @projectId IS NULL
2
Etiqueta tu pregunta con la base de datos que estás utilizando.
- Gordon Linoff
19/03/2021 a las 18:34
Supongo que es Microsoft SQL Server, debido al uso de + para la concatenación de cadenas y la tendencia de muchos usuarios de Microsoft a usar sql para referirse a sql-server.
- Bill Karwin
19/03/2021 a las 18:41
------------------------------------
No probado:
select * from projects
WHERE
projects.id LIKE @projectId+'%'
OR (@projectId IS NULL
AND projects.id IN (select top 2 id from projects)
Como escribió Gordon en su respuesta, un Orden por identificación tendría mucho sentido.
------------------------------------
Podrías simplemente agregar top (2) a la consulta:
select top (2) p.*
from projects p
where p.id LIKE @projectId + '%' or @projectId IS NULL;
Esto supone que like devuelve una fila (o al menos nunca más de 2).
Si pudiera, entonces la unión de todos podría ser la más simple:
select p.*
from projects p
where p.id like @projectId + '%'
union all
select top (2) p.*
from projects p
where @projectId is null;
Tenga en cuenta que esto devuelve dos identificadores de proyecto arbitrarios, al igual que su consulta. Si desea dos específicos, utilice un pedido por.
Estos también suponen que la identificación es única en los proyectos, lo que parece una suposición muy razonable.