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

SQL Server 2008:Đổi tên một phần tử bằng XML DML?

Như có câu nói, "Ở đâu có ý chí, ở đó có cách"

Đây là hai phương pháp: đầu tiên là chỉ cần thay thế xml trước đó bằng một xml mới được xây dựng từ bản gốc với tên phần tử mới. Trong ví dụ của tôi, tôi đã thay đổi Chân / Chân thành Limbs / Limb, điều này có thể rất phức tạp đối với bất kỳ thứ gì ngoại trừ giản đồ đơn giản nhất

Và thứ hai, một cách tiếp cận thích hợp hơn là kết hợp chèn và xóa.

Tôi đã kết hợp chúng thành một ví dụ đơn giản:

declare @xml as xml = '<animal species="Mouse">
  <legs>
    <leg>Front Right</leg>
    <leg>Front Left</leg>
    <leg>Back Right</leg>
    <leg>Back Left</leg>
  </legs>
</animal>'

set @xml = (select 
     t.c.value('@species', 'varchar(max)') as '@species'
    ,(select
     ti.C.value('.', 'varchar(max)') 
from @Xml.nodes('//animal/legs/leg') ti(c) for xml path('limb'), /* root('limb'), */type) as    limbs   
from @xml.nodes('//*:animal') t(c) for xml path('animal'), type)

select @xml;

while (@xml.exist('/animal/limbs/limb') = 1) begin
    /*insert..*/
    set @xml.modify('
            insert <leg>{/animal/limbs/limb[1]/text()}</leg>
            before (/animal/limbs/limb)[1]
        ');
    /*delete..*/
    set @xml.modify('delete (/animal/limbs/limb)[1]');
end

set @xml.modify('
        insert <legs>{/animal/limbs/leg}</legs>
        before (/animal/limbs)[1]
    ');
set @xml.modify('delete (/animal/limbs)[1]');

select @xml;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server Nvarchar và câu lệnh chuẩn bị Java

  2. Khóa ngoại có tự động tạo chỉ mục không?

  3. Khắc phục sự cố Microsoft SQL Server Error 18456

  4. Nối các giá trị hàng T-SQL

  5. danh sách các bảng không có chỉ mục trong sql 2008