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

Loop tak terbatas di CTE saat mem-parsing tabel referensi sendiri

Alasan dari infinite loop adalah record pertama di mana empid=mgrid . Untuk menangani masalah ini, Anda harus menyertakan bidang kumulatif (levels dalam contoh ini) untuk menyimpan mgrid Anda telah memproses dan memeriksa apakah emid sudah ada dalam daftar ini untuk menghindari pengulangan.

Ini pertanyaannya:

with Tree as
        (
        SELECT  empid
        ,       mgrid
        ,       1 as lv
        ,       1 as level1
        ,       null as level2
        ,       null as level3
        ,       null as level4
        ,       null as level5
        ,       cast(mgrid as varchar(max)) levels  
        FROM    Employees
        WHERE   empid = 1 and mgrid = 1
        UNION ALL
        SELECT  E.empid
        ,       E.mgrid
        ,       T.lv + 1
        ,       T.level1
        ,       case when T.lv = 1 then E.empid else t.level2 end
        ,       case when T.lv = 2 then E.empid else t.level3 end
        ,       case when T.lv = 3 then E.empid else t.level4 end
        ,       case when T.lv = 4 then E.empid else t.level5 end
        ,       T.levels+','+cast(E.mgrid as varchar(max)) levels   

          FROM    Employees AS E
        JOIN    Tree T
        ON      E.mgrid = T.empid 
                and (','+T.levels+',' 
                      not like 
                     '%,'+cast(E.empid as varchar(max))+',%')
        )
select  *
from Tree
order by empid

Dan inilah demo SQLFiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. XML sebagai parameter dalam prosedur tersimpan (server sql)

  2. SQL Server Query:Cepat dengan Literal tetapi Lambat dengan Variabel

  3. 3 Area yang Akan Diuntungkan dari Menggunakan Alat Pemantauan Kinerja SQL Server

  4. Merekomendasikan penggunaan tabel temp atau variabel tabel dalam Kerangka Entitas 4. Perbarui kerangka kerja Entitas Kinerja

  5. Kesalahan 0xc0202049:Tugas Aliran Data 1:Kegagalan memasukkan ke dalam kolom hanya-baca