Posso usar a declaração CASO em condição de JUNTO?
A imagem seguinte faz parte do Microsoft SQL Server 2008 R2 System Views. Da imagem podemos ver que a relação entre sys.partitions' e
sys.allocation_units' depende do valor de `sys.allocation_units.type'. Então para juntá-las eu escreveria algo similar a isto:
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)
THEN a.container_id = p.hobt_id
WHEN a.type IN (2)
THEN a.container_id = p.partition_id
END
Mas o código superior dá um erro de sintaxe. Acho que isso's por causa da declaração CASE
.
Alguém pode ajudar a explicar um pouco?
Adicionar mensagem de erro:
Msg 102, Level 15, State 1, Line 6 Sintaxe incorrecta perto de '='.
118
3
Uma expressão
CASE
retorna um valor da parteTHEN
da cláusula. Você poderia utilizá-la assim:Note que você precisa fazer algo com o valor retornado, por exemplo, compará-lo com 1. Sua declaração tentou retornar o valor de uma atribuição ou teste de igualdade, nenhum dos quais faz sentido no contexto de uma cláusula "CASE"/
THEN". (Se o
BOOLEAN` fosse um datatype então o teste para igualdade faria sentido).Eu sugiro que você passe por este link Conditional Joins in SQL Server e https://stackoverflow.com/questions/8361183/t-sql-case-statement-in-a-join-on-clause
por exemplo
Editar: De acordo com os comentários.
Experimenta isto: