COMPUTER ENGINEER

Örneklere git
Blog
SQL Server / T-SQL6 dk çalışma
27/ 65

İleri sorgu teknikleri

Recursive CTE ve hiyerarşiler

Yönetici ağacından çok seviyeli verilere.

AnlaÖrneği inceleKendin uygula

Kavramı anlayalım

Recursive CTE bir başlangıç kümesi ve ona tekrar bağlanan recursive üyeden oluşur. UNION ALL yaygın biçimde seviyeleri birleştirir. Employee ağacında önce yöneticisi olmayan kaydı alır, sonra mevcut seviyenin çalışanlarına bağlı alt çalışanları buluruz.

Hatalı döngü içeren veri sonsuz tekrar üretebilir. SQL Server varsayılan recursion sınırı uygular; MAXRECURSION ile kontrollü sınır belirle. Sınırsız 0 seçeneğini veri doğrulanmadan kullanma. Yol ve derinlik tutmak hata incelemeyi kolaylaştırır; cycle kontrolü ayrıca düşünülmelidir.

NERESİNDE KULLANIRSIN?

Organizasyon ağaçları ve çok seviyeli ilişkiler için.

SIK YAPILAN HATA

Döngü kontrolü olmadan MAXRECURSION 0 kullanmak.

01 / UYGULAMA

Aynı konu. Üç farklı derinlik.

T-SQL / SQL Server 2019+
SELECT EmployeeId, FullName FROM lab.Employee WHERE ManagerId IS NULL;

Anchor kaydı Rasim’dir.

Bu sayfa SQL çalıştırmaz. Örnekleri indirilebilir SqlStudioLab veritabanında, SSMS’de uygula. Geçici tablo örneklerini yeniden çalıştırırken yalnız ilgili #tabloyu temizle. VIEW, procedure ve function örnekleri lab’da kalıcı nesne oluşturur; üretim bağlantısı kullanma.

02 / SIRA SENDE

Önce kendin dene.

Rasim’e bağlı çalışan ağacını derinlik bilgisiyle getir.

Çözümü ve açıklamasını göster
Açıklamalı çözüm
WITH T AS (SELECT EmployeeId, FullName, 0 AS Depth FROM lab.Employee WHERE EmployeeId = 1 UNION ALL SELECT e.EmployeeId, e.FullName, t.Depth + 1 FROM lab.Employee AS e JOIN T AS t ON e.ManagerId = t.EmployeeId) SELECT * FROM T ORDER BY Depth, EmployeeId OPTION (MAXRECURSION 20);

Derinlik bir iş seviyesi göstergesidir; sonuç sırası ayrıca ORDER BY ile belirlenir.