Sıradüzensel yöntemleri kullanarak hiyerarşik bir tablo doldurma
AdventureWorks Pazarlama bölümünde 8 çalışanların vardır.Çalışan hiyerarşisi aşağıdaki gibidir:
David, ÇalışanNo 6, pazarlama yöneticisi olan.Üç pazarlama Specialists rapor David:
Sariya, ÇalışanNo 46
Gamze, ÇalışanNo 271
Jill, ÇalışanNo 119
Pazarlama yardımcı Wanida (ÇalışanNo 269), raporlarıSariyave pazarlama yardımcı ebru (ÇalışanNo 272), raporlarıGamze.
Sıradüzen ağacının kökünü eklemek için
Aşağıdaki örnek ekler David pazarlama yöneticisi içine tablo sıradüzenin kökünde.The OrdLevel column is a hesaplanan sütun.Bu nedenle, bu INSERT ifadesinin bir parçası değil.Bu ilk kaydı kullanır GetRoot() yöntem bu ilk kaydının sıradüzenin kökü olarak doldurmak için.
INSERT HumanResources.EmployeeOrg (OrgNode, EmployeeID, EmpName, Title) VALUES (hierarchyid::GetRoot(), 6, 'David', 'Marketing Manager') ; GO
Ilk satırda incelemek için şu kodu yürütmesine tablo:
SELECT OrgNode.ToString() AS Text_OrgNode, OrgNode, OrgLevel, EmployeeID, EmpName, Title FROM HumanResources.EmployeeOrg ;
Here is the result set.
Text_OrgNode OrgNode OrgLevel EmployeeID EmpName Title ------------ ------- -------- ---------- ------- ----------------- / Ox 0 6 David Marketing Manager
Kullanıyoruz önceki derste olarak, ToString() dönüştürme yöntem hierarchyid verileri daha kolay anlaşılır bir biçimde yazın.
Bağımlı bir çalışan eklemek için
Sariya için bildiriyor.David.Eklemek için Sariya'ler düğüm uygun bir oluşturmalısınız.OrgNode veri değeri yazınhierarchyid. Aşağıdaki kod bir değişken veri türü oluşturur. hierarchyid ve bu tablonun OrgNode değeri kök ile doldurur. Then uses that variable with the GetDescendant() method to insert row that is a subordinate node.GetDescendant takes two arguments.Bağımsız değişken değeri için aşağıdaki seçenekleri gözden geçirin:
Üst, NULL ise GetDescendant NULL döndürüyor.
Üst BOş olmayan ve NULL, child1 hem alt2 GetDescendant üst alt döndürür.
Üst ve child1 BOş olmayan ve NULL, alt2 varsa GetDescendant üst alt child1 büyük verir.
Üst ve alt2 BOş olmayan ve NULL, child1 GetDescendant üst alt alt2'dan küçük döndürür.
Üst ve child1 alt2 tüm ise NULL. GetDescendant üst alt child1 daha büyüktür ve küçüktür alt2'ı verir.
Aşağıdaki kullandığı kod (NULL, NULL) olduğu için değil tüm satırlar ancak kök bağımsız değişkenleri üst tablo kök hariç. yürütmek eklemek için aşağıdaki kodu Sariya:
DECLARE @Manager hierarchyid SELECT @Manager = hierarchyid::GetRoot() FROM HumanResources.EmployeeOrg ; INSERT HumanResources.EmployeeOrg (OrgNode, EmployeeID, EmpName, Title) VALUES (@Manager.GetDescendant(NULL, NULL), 46, 'Sariya', 'Marketing Specialist') ;
Sorgudan tablo sorgulamak ve girişleri görüntülenme Bkz: ilk yordamı yineleyin:
SELECT OrgNode.ToString() AS Text_OrgNode, OrgNode, OrgLevel, EmployeeID, EmpName, Title FROM HumanResources.EmployeeOrg ;
Here is the result set.
Text_OrgNode OrgNode OrgLevel EmployeeID EmpName Title ------------ ------- -------- ---------- ------- ----------------- / Ox 0 6 David Marketing Manager /1/ 0x58 1 46 Sariya Marketing Specialist
Yeni düğümler girmek için bir yordam oluşturmak için
Girme veri basitleştirmek için aşağıdakileri oluşturmak için çalışanları eklemek için saklı yordamıyla EmployeeOrg tablo.Yordamı eklenen çalışan hakkındaki giriş değerleri kabul eder.Bu ÇalışanNo Yeni bir çalışanın yöneticisinin, yeni bir çalışanın ÇalışanNo numarası ve adı ve başlık.Yordamı kullanır. GetDescendant() ve ayrıca GetAncestor() yöntem.Yordamı oluşturmak için şu kodu çalıştırın:
CREATE PROC AddEmp(@mgrid int, @empid int, @e_name varchar(20), @title varchar(20)) AS BEGIN DECLARE @mOrgNode hierarchyid, @lc hierarchyid SELECT @mOrgNode = OrgNode FROM HumanResources.EmployeeOrg WHERE EmployeeID = @mgrid SET TRANSACTION ISOLATION LEVEL SERIALIZABLE BEGIN TRANSACTION SELECT @lc = max(OrgNode) FROM HumanResources.EmployeeOrg WHERE OrgNode.GetAncestor(1) =@mOrgNode ; INSERT HumanResources.EmployeeOrg (OrgNode, EmployeeID, EmpName, Title) VALUES(@mOrgNode.GetDescendant(@lc, NULL), @empid, @e_name, @title) COMMIT END ; GO
Aşağıdaki örnek, doğrudan veya dolaylı olarak rapor 4 çalışanları Kalan ekler. David.
EXEC AddEmp 6, 271, 'John', 'Marketing Specialist' ; EXEC AddEmp 6, 119, 'Jill', 'Marketing Specialist' ; EXEC AddEmp 46, 269, 'Wanida', 'Marketing Assistant' ; EXEC AddEmp 271, 272, 'Mary', 'Marketing Assistant' ;
Yine, aşağıdaki sorgu yürütmek satırları inceleyin EmployeeOrg tablo:
SELECT OrgNode.ToString() AS Text_OrgNode, OrgNode, OrgLevel, EmployeeID, EmpName, Title FROM HumanResources.EmployeeOrg ; GO
Here is the result set.
Text_OrgNode OrgNode OrgLevel EmployeeID EmpName Title ------------ ------- -------- ---------- ------- ----------------- / Ox 0 6 David Marketing Manager /1/ 0x58 1 46 Sariya Marketing Specialist /1/1/ 0x5AC0 2 269 Wanida Marketing Assistant /2/ 0x68 1 271 John Marketing Specialist /2/1/ 0x6AC0 2 272 Mary Marketing Assistant /3/ 0x78 1 119 Jill Marketing Specialist
Tabloyu şimdi tam olarak Pazarlama kuruluş ile doldurulur.