sql >> Base de Datos >  >> RDS >> Sqlserver

No se puede agregar la condición en la parte FOR XML

Si entiendo lo que dices, entonces si Col1 contiene la cadena "SUP", quiere esta etiqueta en su XML final:

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

De lo contrario, desea esta expresión:

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

Creo que puedes obtener eso con este fragmento de 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 qué el tuyo no funcionó:no puedes hacer que el nombre de una columna (o de un elemento XML) sea condicional. Lo más cercano que puede obtener es hacer que una u otra expresión se evalúe como nula, en cuyo caso no se representará en el XML final.