Construire des balises avec le chemin XML dans SQL.Supprimer les attributs indésirables
-
12-11-2019 - |
Question
Probablement une question très simple à répondre, mais je ne peux pas pour la vie de moi le trouver nulle part.
Je cherche à construire des options de liste de sélection de la base de données à l'aide du chemin XML.Jusqu'à présent, j'ai ceci:
SELECT ID AS 'option/@value', Name AS [option]
FROM MyTable
FOR XML Path('')
Qu'est-ce qui me fait ceci:
<option value="1">Item 1</option><option value="2">Item 2</option>... and so on
Yep assez simple des choses mais maintenant je veux définir l'option sélectionnée où l'identifiant permet de dire 1. Cela ne devrait donc jamais se produire une fois.Alors j'ajoute ceci:
SELECT
ID AS 'option/@value', Name AS [option],
CASE WHEN ID=1 THEN 'selected' ELSE '' END AS 'option/@selected',
FROM MyTable
FOR XML Path('')
sortie:
<option value="1" selected="selected">Item1</option><option value="2" selected="">Item2</option>
Bien que cela puisse définir techniquement l'attribut droit, je n'ai besoin que de l'attribut @ sélectionné sur les options où le cas est vrai.
Toute aide ou point dans la bonne direction serait grandement reçue.
La solution
au lieu d'utiliser une chaîne vide dans votre déclaration de cas, renvoyez une null
SELECT ID AS 'option/@value', CASE WHEN ID=1 THEN 'selected' ELSE null END AS 'option/@selected', Name AS [option] FROM MyTable FOR XML Path('')