HierarchyId ile bir ağaç dalı yüklemek / okumak için set tabanlı bir yol var mı


11

HierarchyId ile oynuyorum ve aşağıdakileri yapmak için set tabanlı bir yol bulmadım:

  • tüm alt ağacı aynı anda ekle
  • tüm alt ağacı bir kerede al

Bu soru ile ilgilidir benim bir öncekinden ve ben HierarchyId bir düğüm veya bir defada bir düzeydir bu iki görevi yerine getirmek için tek yol şüpheli. Eğer maddileştirilmiş yol kullanıyorsam, her iki eylem de tek bir (ve önemsiz) küme tabanlı komutla kolayca gerçekleştirilir.

Neyi kaçırıyorum?

Edit: Ayrıca bir alt ağaç taşımak için bir yol özledim, ama Mikael Eriksson yorumdan öğrendim



@MikaelEriksson Yorumunuzu cevaplayabilir misiniz?
AK

2
Elbette. Ayrıca neler olup bittiğini nasıl anladığımı da biraz ayrıntılandırdım. BTW, HierarchyId üzerinde sadece biraz test yaptım, üretimde hiç kullanmadım.
Mikael Eriksson

Yanıtlar:


5

Kullanılacak işlev GetReparentedValue'dur, ancak yalnızca GetReparentedValueağaç kullanılırken "tutarsız" duruma gelebilir.

İşte Microsoft tarafından sağlanan ve bununla ilgilenen bazı kodlar. Hareket eden alt ağaçlar .

Sanırım bununla ilgili bir ağaç zorlamak . PK'ye kendi kendine birleştirme yapan üst kimlik için hesaplanmış bir sütun kullanır.


Bu şimdiye kadarki en iyi cevap. Ne yazık ki, bir komutta birden fazla seviyeden bir alt ağaç eklemek / seçmek için bir yol görmüyorum.
AK

3

Kullanma - bütün bir alt ağaç alma basittir IsDescendentOfgöre, yöntem MSDN'den

DECLARE @Manager hierarchyid
SELECT @Manager = OrgNode FROM HumanResources.EmployeeDemo
  WHERE LoginID = 'adventure-works\dylan0'

SELECT * FROM HumanResources.EmployeeDemo
WHERE OrgNode.IsDescendantOf(@Manager) = 1

Ekleme daha karmaşıktır, ancak asıl sorununuz kısıtlamalarınızda olacaktır - ebeveynleri işleninceye kadar alt nesneleri ekleyemezsiniz. Bu durumda, yineleme ve ekleme işlemlerini hiyerarşik sırayla gerçekleştirin veya kısıtlamaları kapatın ve ekleyin.

Çok miktarda veri eklerken - geçiş, toplu veya toplu ekleme vb. - Kısıtlamayı kapatırdım. Sistemin çalışması sırasında, hiyerarşiye büyük miktarlarda büyük miktarın eklenmesi gereken durumlarda karşılaşmadığım için, işlevsel olarak eklerken yinelemeliyim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.