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

Sử dụng SQL để sao chép cấu trúc cây được đại diện trong cơ sở dữ liệu

Hãy thử điều này, dựa trên truy vấn từ Quassnoi Bài viết của Danh sách gần kề so với Tập hợp lồng nhau :Máy chủ SQL :

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

Kết quả khi chạy trên dữ liệu thử nghiệm của bạn:

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. 5 Thói quen giám sát cơ sở dữ liệu của các DBA thành công

  2. Khóa chính tổng hợp + Khóa ngoài

  3. Về hồ sơ Sql

  4. Làm cách nào để tách một ký tự ra khỏi một cột trong SQL Server?

  5. SQL Server Express LocalDB có thể được kết nối từ xa không?