Siéntete libre de divulgar nuestro espacio y códigos en tus redes, ayúdanos a aumentar nuestra comunidad.
Solución:
A CASE
expresión devuelve un valor de la THEN
parte de la cláusula. Podrías usarlo así:
SELECT *
FROM sys.indexes i
JOIN sys.partitions p
ON i.index_id = p.index_id
JOIN sys.allocation_units a
ON CASE
WHEN a.type IN (1, 3) AND a.container_id = p.hobt_id THEN 1
WHEN a.type IN (2) AND a.container_id = p.partition_id THEN 1
ELSE 0
END = 1
Tenga en cuenta que debe hacer algo con el valor devuelto, por ejemplo, compararlo con 1. Su declaración intentó devolver el valor de una asignación o prueba de igualdad, ninguno de los cuales tiene sentido en el contexto de un CASE
/THEN
cláusula. (Si BOOLEAN
fuera un tipo de datos, entonces la prueba de igualdad tendría sentido).
En su lugar, simplemente ÚNASE a ambas tablas y, en su cláusula SELECT, devuelva los datos de la que coincida:
Le sugiero que vaya a través de este enlace Uniones condicionales en SQL Server y declaración de caso T-SQL en una cláusula JOIN ON
p.ej
SELECT *
FROM sys.indexes i
JOIN sys.partitions p
ON i.index_id = p.index_id
JOIN sys.allocation_units a
ON a.container_id =
CASE
WHEN a.type IN (1, 3)
THEN p.hobt_id
WHEN a.type IN (2)
THEN p.partition_id
END
Editar: según los comentarios.
No puede especificar la condición de unión como lo está haciendo. Verifique la consulta anterior que no tiene ningún error. Saqué la columna común hacia arriba y el valor de la columna derecha se evaluará con la condición.
Prueba esto:
...JOIN sys.allocation_units a ON
(a.type=2 AND a.container_id = p.partition_id)
OR (a.type IN (1, 3) AND a.container_id = p.hobt_id)
Aquí puedes ver las reseñas y valoraciones de los usuarios
Más adelante puedes encontrar las explicaciones de otros desarrolladores, tú igualmente tienes la opción de dejar el tuyo si te apetece.