Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara menggunakan variabel SQL untuk mengulangi node XML

Kode Anda sendiri akan berfungsi hanya dengan satu [1] . Fungsi .modify() tidak dapat menafsirkan [sql:variable(...)] ... Ini bisa berupa filter apa saja, bahkan satu dengan lebih dari satu hasil... Jadi, ubah saja ini ke:

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

Tapi saya akan memilih jalan lain... Anda mungkin membaca keseluruhannya sebagai tabel turunan dan membangun kembali XML seperti ini:

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

Pendekatan lain adalah 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. Bagaimana saya bisa menanyakan nilai di kolom SQL Server XML?

  2. Mendapatkan peringatan:Nilai nol dihilangkan dengan operasi SET agregat atau lainnya

  3. Saya perlu mengimpor data dari Excel ke SQL Server menggunakan VBA

  4. Prosedur tersimpan yang mengekspor data ke file csv hanya mengekspor ke satu file

  5. Bagaimana saya bisa melakukan pernyataan UPDATE dengan JOIN di SQL Server?