Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Kann ich die CASE-Anweisung in einer JOIN-Bedingung verwenden?

Ein CASE expression gibt einen Wert aus THEN zurück Teil der Klausel. Sie könnten es folgendermaßen verwenden:

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

Beachten Sie, dass Sie etwas mit dem zurückgegebenen Wert tun müssen, z. Vergleichen Sie es mit 1. Ihre Anweisung hat versucht, den Wert einer Zuweisung zurückzugeben oder auf Gleichheit zu prüfen, was im Kontext eines CASE nicht sinnvoll ist /THEN Klausel. (Falls BOOLEAN ein Datentyp wäre, dann würde der Test auf Gleichheit Sinn machen.)