Construire des balises avec le chemin XML dans SQL.Supprimer les attributs indésirables

StackOverflow https://stackoverflow.com/questions/9430453

  •  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.

Était-ce utile?

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('')

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top