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

Gunakan SQL untuk mengkloning struktur pohon yang diwakili dalam database

Coba ini, berdasarkan kueri dari Quassnoi 's article Daftar Ketetanggaan vs Kumpulan Bersarang :SQL Server :

WITH q AS
(
    SELECT  h.*, 1 AS level
    FROM    Table1 h
    WHERE   id = 3
    UNION ALL
    SELECT  hp.*, level + 1
    FROM    q
    JOIN    Table1 hp
    ON      hp.id = q.ParentGroupID
), q2 AS (
    SELECT
        ID,
        ParentGroupID,
        SomeValue,
        (SELECT MAX(level) FROM q) - level AS level
    FROM q
)
INSERT INTO table1
SELECT
    (SELECT MAX(ID) FROM Table1) + level + 1 AS ID,
    CASE WHEN level = 0 THEN -1
         ELSE (SELECT MAX(ID) FROM Table1) + level
    END AS ParentGroupID,
    SomeValue + '-cloned'
FROM    q2

Hasil saat dijalankan pada data pengujian Anda:

ID  ParentGroupID  SomeValue  
1   -1             a          
2   1              b          
3   2              c          
4   -1             a-cloned
5   4              b-cloned
6   5              c-cloned


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan ID yang terakhir dimasukkan tanpa menggunakan kueri kedua

  2. Perlu T-SQL Query menemukan semua cara yang mungkin

  3. Mengunggah dokumen di sql server 2008 menggunakan asp.net C#

  4. Bagaimana saya bisa menggunakan fungsi agregat SUM pada kolom alias?

  5. Baca beberapa tabel dengan relasi dengan t-sql ke dalam DataSet