Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да използвате SQL променлива за итерация на XML възли

Вашият собствен код ще работи само с още един [1] . Функцията .modify() не може да интерпретира [sql:variable(...)] ... Това може да е всеки филтър, дори такъв с повече от един резултат... Така че просто променете това на:

DECLARE @xml xml = '<Root>
                      <Contacts>
                        <Contact name="John Doe" type="REG" other="value" />
                        <Contact name="Jane Doe" type="REG" other="value" />
                        <Contact name="Jennifer Doe" type="REG" other="value" />
                        <Contact name="Jane Doe" type="REG" other="value" />
                      </Contacts>
                    </Root>';
DECLARE @i int = 1
SET @xml.modify('replace value of (/Root/Contacts/Contact)[sql:variable("@i")][1]/@type with "NEW"')
SELECT @xml

Но аз бих тръгнал по друг път... Може да прочетете цялата партида като производна таблица и да изградите отново XML по този начин:

SELECT
(
    SELECT c.value('@name','nvarchar(max)') AS [@name]
          --,c.value('@type','nvarchar(max)') AS [@type]
          ,'NEW' AS [@type]
          ,c.value('@other','nvarchar(max)') AS [@other]
    FROM @xml.nodes('/Root/Contacts/Contact') AS A(c)
    FOR XML PATH('Contact'),ROOT('Contact'),TYPE
)
FOR XML PATH('Root')

Друг подход би бил FLWOR:

SELECT @xml.query('
for $r in /Root/Contacts
    return <Root><Contacts>
    {
        for $c in /Root/Contacts/Contact
           return <Contact name="{$c/@name}" type="NEW" other="{$c/@other}"/>
    }
    </Contacts></Root>
')



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да предадете параметър на mssql заявка в възел js

  2. SQL Server 2008 - Добавяне към низ в определена позиция в колоната с имена

  3. Как да проверя дали обектът DateTime не е присвоен?

  4. Как виждате ЦЕЛИЯ текст от ntext или nvarchar(max) в SSMS?

  5. Показване на връзката родител-дете, когато родител и дете се съхраняват в една и съща таблица