Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách sử dụng biến SQL để lặp lại các nút XML

Mã của riêng bạn sẽ hoạt động chỉ với một [1] nữa . Hàm .modify() không thể diễn giải [sql:variable(...)] ... Đây có thể là bất kỳ bộ lọc nào, thậm chí là một bộ lọc có nhiều hơn một kết quả ... Vì vậy, chỉ cần thay đổi bộ lọc này thành:

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

Nhưng tôi sẽ đi một con đường khác ... Bạn có thể đọc toàn bộ dưới dạng bảng dẫn xuất và xây dựng lại XML như thế này:

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

Một cách tiếp cận khác sẽ là 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. Cách trả lại giá trị Unicode cho một ký tự nhất định trong SQL Server - UNICODE ()

  2. Làm cách nào để khôi phục cơ sở dữ liệu khác trong SQL Server?

  3. Cấp quyền truy cập vào một db cho người dùng / vai trò của người khác

  4. Làm cách nào để trích xuất chuỗi con cụ thể này trong SQL Server?

  5. Tìm tên cột thực của một bí danh được sử dụng trong một dạng xem?