Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Impossible d'ajouter une condition dans la partie FOR XML

Si je comprends ce que vous dites, alors si Col1 contient la chaîne "SUP", vous voulez cette balise dans votre XML final :

<ss:Data ss:Type="String">SomethingContainingSup</ss:Data>

Sinon, vous voulez cette expression :

<Data ss:Type="String">SomethingElse</Data>

Je pense que vous pouvez obtenir cela avec ce fragment 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],
       ''

Pourquoi le vôtre n'a pas fonctionné :vous ne pouvez pas rendre conditionnel le nom d'une colonne (ou d'un élément XML). Le plus proche que vous puissiez obtenir est de faire en sorte que l'une ou l'autre expression soit évaluée à null, auquel cas elle ne sera pas rendue dans le XML final.