Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Não é possível adicionar condição na parte FOR XML


Se eu entendi o que você está dizendo, então se Col1 contém a string "SUP", você deseja esta tag em seu XML final:
<ss:Data ss:Type="String">SomethingContainingSup</ss:Data>

Caso contrário, você quer esta expressão:
<Data ss:Type="String">SomethingElse</Data>

Eu acho que você pode conseguir isso com este fragmento SQL:
SELECT CASE WHEN COL1 LIKE '%SUP%' THEN 'String' END  as [Cell/ss:Data/@ss:Type],
       CASE WHEN Col1 Like '%SUP%' THEN Col1 END as [Cell/ss:Data], 
       CASE WHEN COL1 NOT LIKE '%SUP%' THEN 'String' END  as [Cell/Data/@ss:Type],                    
       CASE WHEN Col1 NOT Like '%SUP%' THEN Col1  END as [Cell/Data],
       ''

Por que o seu não funcionou:você não pode condicionar o nome de uma coluna (ou de um elemento XML). O mais próximo que você pode obter é fazer com que uma ou outra expressão seja avaliada como nula, nesse caso ela não será renderizada no XML final.