SQL dinámico donde declaración

CorePress2024-01-16  9

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.

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare