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

Iterasi melalui variabel XML di SQL Server

Sesuatu seperti ini?

DECLARE @XmlVariable XML = '<parent_node>
                              <category>Low</category>
                              <category>Medium</category>
                              <category>High</category>
                            </parent_node>'

INSERT INTO dbo.YourTargetTable(CategoryColumn)
  SELECT 
     XTbl.Cats.value('.', 'varchar(50)')
  FROM 
     @XmlVariable.nodes('/parent_node/category') AS XTbl(Cats)

Pembaruan: jika Anda harus gunakan prosedur tersimpan lama dan tidak dapat mengubahnya (itu akan menjadi cara pilihan saya untuk melakukan ini), maka Anda harus melakukan perulangan baris demi baris (RBAR) sendiri, mis. dengan menggunakan variabel tabel:

-- declare temporary work table
DECLARE @RbarTable TABLE (CategoryName VARCHAR(50))

-- insert values into temporary work table
INSERT INTO @RbarTable(CategoryName)
  SELECT 
     XTbl.Cats.value('.', 'varchar(50)')
  FROM 
     @XmlVariable.nodes('/parent_node/category') AS XTbl(Cats)

-- declare a single category
DECLARE @CategoryNameToBeInserted VARCHAR(50)

-- get the first category
SELECT TOP 1 @CategoryNameToBeInserted = CategoryName FROM @RbarTable

-- as long as we have data
WHILE @CategoryNameToBeInserted IS NOT NULL
BEGIN
    -- execute your stored procedure here.....    
    EXEC sp_executesql N'dbo.YourStoredProcedure @CategoryName', 
                       N'@CategoryName VARCHAR(50)', 
                       @CategoryName = @CategoryNameToBeInserted

    -- delete the category we just inserted from the temporary work table
    DELETE FROM @RbarTable WHERE CategoryName = @CategoryNameToBeInserted

    -- see if we still have more categories to insert    
    SET @CategoryNameToBeInserted = NULL
    SELECT TOP 1 @CategoryNameToBeInserted = CategoryName FROM @RbarTable ORDER BY CategoryName
END


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah saya mendapatkan hasil prosedur tersimpan ke dalam kursor di dalam prosedur tersimpan lain di SQL?

  2. Apa gunanya COLLATIONS untuk kolom nvarchar (Unicode)?

  3. Peningkatan identitas melompat di database SQL Server

  4. Pilih Kueri dengan kondisi Di mana tergantung pada nilai daftar di asp.net

  5. String_agg untuk SQL Server sebelum 2017