sql >> Database >  >> RDS >> Sqlserver

Hoe selecteer ik de waarde van het xsi:type attribuut in SQL Server?

Zonder verzameling op te geven, werkt dit prima voor mij:

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

Kunt u alstublieft de inhoud van search.SearchParameters . plaatsen ?

Bijwerken:

Op schemagebonden XML , lijkt dit onmogelijk.

U kunt uw column casten naar een freetype XML :

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

(maar u kunt XML niet gebruiken indexen van een willekeurige in uw kolom), of voer een booleaanse controle uit op een specifiek type:

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


  1. SQL_CALC_FOUND_ROWS / FOUND_ROWS() werkt niet in PHP

  2. SQL server freetexttable gedeeltelijke woorden

  3. CASE, WHEN, THEN, END gebruiken in een selectiequery met MySQL

  4. Hoe kan ik een UPDATE-instructie doen met JOIN in SQL Server?