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

Comment sélectionner la valeur de l'attribut xsi:type dans SQL Server ?

Sans spécifier de collection, cela fonctionne bien pour moi :

DECLARE @X XML
SET @x = N' 
<parameters xmlns="http://www.educations.com/Search/Parameters.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <parameter  xsi:type="category" categoryID="38" />
</parameters>'
;

WITH    XMLNAMESPACES
        (
        'http://www.educations.com/Search/Parameters.xsd' as p,
        'http://www.w3.org/2001/XMLSchema-instance' as xsi
        )
SELECT  @X.value('(/p:parameters/p:parameter/@xsi:type)[1]','nvarchar(max)')

Pourriez-vous s'il vous plaît poster le contenu de search.SearchParameters ?

Mise à jour :

Sur XML lié ​​au schéma , cela semble impossible.

Vous pouvez convertir votre colonne en un XML de type libre :

WITH    XMLNAMESPACES
        (
        'http://www.educations.com/Search/Parameters.xsd' as p,
        'http://www.w3.org/2001/XMLSchema-instance' as xsi
        )
SELECT  CAST(@X AS XML).value('(/p:parameters/p:parameter/@xsi:type)[1]','nvarchar(max)')

(mais vous ne pourrez pas utiliser XML index de n'importe lequel sur votre colonne), ou effectuez une vérification booléenne sur un type spécifique :

WITH XMLNAMESPACES
        (
        'http://www.educations.com/Search/Parameters.xsd' as p
        )
SELECT @X.query('(/p:parameters/p:parameter)[1] instance of element(*, p:category?)')