GetDescendant (Mesin Database)
Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Mengembalikan simpul anak dari induk.
Sintaksis
-- Transact-SQL syntax
parent.GetDescendant ( child1 , child2 )
-- CLR syntax
SqlHierarchyId GetDescendant ( SqlHierarchyId child1 , SqlHierarchyId child2 )
Catatan
Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
child1
NULL atau hierarkiid anak dari simpul saat ini.
child2
NULL atau hierarkiid anak dari simpul saat ini.
Jenis Kembalian
Jenis pengembalian SQL Server:hierarchyid
Tipe pengembalian CLR:SqlHierarchyId
Keterangan
Mengembalikan satu simpul anak yang merupakan turunan dari induk.
- Jika induk adalah NULL, mengembalikan NULL.
- Jika induk bukan NULL, dan child1 dan child2 adalah NULL, mengembalikan turunan induk.
- Jika induk dan turunan1 bukan NULL, dan child2 adalah NULL, mengembalikan turunan induk yang lebih besar dari child1.
- Jika induk dan turunan2 bukan NULL dan child1 adalah NULL, mengembalikan turunan induk kurang dari child2.
- Jika induk, turunan1, dan child2 bukan NULL, mengembalikan turunan induk yang lebih besar dari child1 dan kurang dari child2.
- Jika child1 bukan NULL dan bukan anak dari induk, pengecualian akan dinaikkan.
- Jika child2 bukan NULL dan bukan anak dari induk, pengecualian akan dinaikkan.
- Jika child1 >= child2, pengecualian akan dinaikkan.
GetDescendant adalah deterministik. Oleh karena itu, jika GetDescendant dipanggil dengan input yang sama, itu akan selalu menghasilkan output yang sama. Namun, identitas anak yang dihasilkan dapat bervariasi tergantung pada hubungannya dengan simpul lain, seperti yang ditunjukkan dalam contoh C.
Contoh
J. Menyisipkan baris sebagai simpul turunan paling sedikit
Karyawan baru dipekerjakan, melaporkan kepada karyawan yang ada di node /3/1/
. Jalankan kode berikut untuk menyisipkan baris baru dengan menggunakan metode GetDescendant tanpa argumen untuk menentukan node baris baru sebagai /3/1/1/
:
DECLARE @Manager hierarchyid;
SET @Manager = CAST('/3/1/' AS hierarchyid);
INSERT HumanResources.EmployeeDemo (OrgNode, LoginID, Title, HireDate)
VALUES
(@Manager.GetDescendant(NULL, NULL),
'adventure-works\FirstNewEmployee', 'Application Intern', '3/11/07') ;
B. Menyisipkan baris sebagai simpul turunan yang lebih besar
Karyawan baru lainnya dipekerjakan, melaporkan ke manajer yang sama seperti dalam contoh A. Jalankan kode berikut untuk menyisipkan baris baru dengan menggunakan metode GetDescendant menggunakan argumen anak 1 untuk menentukan bahwa simpul baris baru akan mengikuti simpul dalam contoh A, menjadi /3/1/2/
:
DECLARE @Manager hierarchyid, @Child1 hierarchyid;
SET @Manager = CAST('/3/1/' AS hierarchyid);
SET @Child1 = CAST('/3/1/1/' AS hierarchyid);
INSERT HumanResources.EmployeeDemo (OrgNode, LoginID, Title, HireDate)
VALUES
(@Manager.GetDescendant(@Child1, NULL),
'adventure-works\SecondNewEmployee', 'Application Intern', '3/11/07') ;
C. Menyisipkan baris di antara dua simpul yang ada
Karyawan ketiga dipekerjakan, melaporkan ke manajer yang sama seperti dalam contoh A. Contoh ini menyisipkan baris baru ke simpul yang lebih besar dari FirstNewEmployee
dalam contoh A, dan kurang dari SecondNewEmployee
dalam contoh B. Jalankan kode berikut dengan menggunakan metode GetDescendant. Gunakan argumen child1 dan argumen child2 untuk menentukan bahwa simpul baris baru akan menjadi simpul /3/1/1.1/
:
DECLARE @Manager hierarchyid, @Child1 hierarchyid, @Child2 hierarchyid;
SET @Manager = CAST('/3/1/' AS hierarchyid);
SET @Child1 = CAST('/3/1/1/' AS hierarchyid);
SET @Child2 = CAST('/3/1/2/' AS hierarchyid);
INSERT HumanResources.EmployeeDemo (OrgNode, LoginID, Title, HireDate)
VALUES
(@Manager.GetDescendant(@Child1, @Child2),
'adventure-works\ThirdNewEmployee', 'Application Intern', '3/11/07') ;
Setelah menyelesaikan contoh A, B, dan C, simpul yang ditambahkan ke tabel akan menjadi serekan dengan nilai hierarkiid berikut:
/3/1/1/
/3/1/1.1/
/3/1/2/
Node /3/1/1.1/
lebih besar dari node /3/1/1/
tetapi pada tingkat yang sama dalam hierarki.
D. Contoh skalar
SQL Server mendukung penyisipan dan penghapusan arbitrer dari simpul hierarkis apa pun. Dengan menggunakan GetDescendant(), selalu dimungkinkan untuk menghasilkan simpul di antara dua simpul hierarkis. Jalankan kode berikut untuk menghasilkan node sampel menggunakan GetDescendant
:
DECLARE @h hierarchyid = hierarchyid::GetRoot();
DECLARE @c hierarchyid = @h.GetDescendant(NULL, NULL);
SELECT @c.ToString();
DECLARE @c2 hierarchyid = @h.GetDescendant(@c, NULL);
SELECT @c2.ToString();
SET @c2 = @h.GetDescendant(@c, @c2);
SELECT @c2.ToString();
SET @c = @h.GetDescendant(@c, @c2);
SELECT @c.ToString();
SET @c2 = @h.GetDescendant(@c, @c2);
SELECT @c2.ToString();
E. Contoh CLR
Cuplikan GetDescendant()
kode berikut memanggil metode :
SqlHierarchyId parent, child1, child2;
parent = SqlHierarchyId.GetRoot();
child1 = parent.GetDescendant(SqlHierarchyId.Null, SqlHierarchyId.Null);
child2 = parent.GetDescendant(child1, SqlHierarchyId.Null);
Console.Write(parent.GetDescendant(child1, child2).ToString());
Baca juga
Referensi Metode Tipe Data hierarkiid
Data Hierarkis (SQL Server)
hierarki (Transact-SQL)
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk