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

Bedingung im FOR XML-Teil kann nicht hinzugefügt werden

Wenn ich verstehe, was Sie sagen, dann wenn Col1 die Zeichenfolge "SUP" enthält, möchten Sie dieses Tag in Ihrem endgültigen XML:

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

Andernfalls möchten Sie diesen Ausdruck:

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

Ich denke, Sie können das mit diesem SQL-Fragment erreichen:

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],
       ''

Warum Ihre nicht funktioniert hat:Sie können den Namen einer Spalte (oder eines XML-Elements) nicht bedingt machen. Das Beste, was Sie erreichen können, ist, den einen oder anderen Ausdruck zu null auszuwerten. In diesem Fall wird er nicht im endgültigen XML gerendert.