SQL: How can i get the value of an attribute in XML datatype

后端 未结 3 1344
南旧
南旧 2020-12-11 14:55

I have the following xml in my database:


  

I\'m using something like thi

相关标签:
3条回答
  • 2020-12-11 15:00

    Use XQuery:

    declare @xml xml =
    '<email>
      <account language="en" />
    </email>'
    
    select @xml.value('(/email/account/@language)[1]', 'nvarchar(max)')
    

    declare @t table (m xml)
    
    insert @t values 
        ('<email><account language="en" /></email>'), 
        ('<email><account language="fr" /></email>')
    
    select m.value('(/email/account/@language)[1]', 'nvarchar(max)')
    from @t
    

    Output:

    en
    fr
    
    0 讨论(0)
  • 2020-12-11 15:05

    This should work:

    DECLARE @xml XML
    
    SET @xml = N'<email><account language="en" /></email>'
    
    SELECT T.C.value('@language', 'nvarchar(100)')
    FROM @xml.nodes('email/account') T(C)
    
    0 讨论(0)
  • 2020-12-11 15:20

    It depends a lot on how you're querying the document. You can do this, though:

    CREATE TABLE #example (
       document NText
    );
    INSERT INTO #example (document)
    SELECT N'<email><account language="en" /></email>';
    
    WITH XmlExample AS (
      SELECT CONVERT(XML, document) doc
      FROM #example
    )
    SELECT
      C.value('@language', 'VarChar(2)') lang
    FROM XmlExample CROSS APPLY
         XmlExample.doc.nodes('//account') X(C);
    
    DROP TABLE #example;
    

    EDIT after changes to your question.

    0 讨论(0)
提交回复
热议问题