Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Użyj SQL, aby sklonować strukturę drzewa reprezentowaną w bazie danych

Wypróbuj to na podstawie zapytania od Quassnoi artykuł Lista sąsiedztwa a zestawy zagnieżdżone :Serwer 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

Wynik po uruchomieniu na danych testowych:

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. Jak naprawić „Konwersja nie powiodła się podczas konwersji wartości na typ danych” w SQL Server

  2. Jaka jest różnica między varchar a nvarchar?

  3. zastąp NULL wartością pustą lub zerem w serwerze sql

  4. sql server 2008 management studio nie sprawdza składni mojego zapytania

  5. Aktualizacja SQL gdzie w zestawie danych