サイトのツリー構造を出力するT-SQL

samatsu 10/19/2018 734 N/A Sitecore Programming

Sitecoreのコンテンツツリーのツリー構造を抽出する機能があるかたまに聞かれるので、 Homeアイテム配下のツリー構造をそこそこ整形して出力するT-SQLを作成してみました。

大規模のデータを選択する対象とする際には、個人的には禁じ手の文字列接続をしていますが、まぁ、オンラインで頻繁に実行するクエリではないので、許してください。

クエリをカスタマイズすれば、取得するデータを変更できます。

-- SiteのHomeアイテムのID
declare @home as uniqueidentifier = '{XXXXXXXX-YYYY-ZZZZ-AAAA-BBBBBBBBBBBB}';

WITH ItemTree(ItemID, ParentID, ItemName, Level, Path, Path2)
AS
(
	SELECT ID as ItemID, ParentID, Name as ItemName, 1 as Level , CAST(Name as nvarchar(4000)), CAST( Name as nvarchar(4000)) as Path2
	  FROM dbo.Items
	 WHERE ID = @home
	 UNION ALL
	 SELECT i.ID as ItemID, i.ParentID, i.Name as ItemName , Level + 1  ,  it.Path + ' / ' + i.Name,   SPACE(2*Level) + i.Name 
	  FROM dbo.Items i
	  INNER JOIN ItemTree as it
	    on it.ItemID = i.ParentID
)
SELECT *
 FROM ItemTree
 Order BY Path;

プログラミングすればもっと柔軟にデータを取得できると思うのですが、T-SQLの場合は、お手軽に実行できるので参考に参考に掲載しておきます。

SSMSで実行するとこんな感じになります。