Sitecore Item Paths in SQL Queries

September 03, 2016
1 min read

Developing or debugging Sitecore applications can quite often lead to executing SQL queries to try and work out how something works or where the issue lies.

One piece of information that cannot be easily accessed in an SQL query is the hierarchy of items because the item path isn't saved as a field value within the database. Item hierarchy is instead stored by each row in the Items table storing the ID of its parent in the ParentID column.

Running the following SQL statement will create a view which is a copy of the Items table but with an additional column defining the item's full path:

CREATE VIEW [dbo].[ItemsPath]
    WITH ItemsTable (ItemPath, ID, Name, TemplateID, MasterID, ParentID, Created, Updated)
        SELECT CAST('/' + base.Name AS nvarchar(MAX)) as ItemPath,
            base.ID, base.Name, base.TemplateID, base.MasterID, base.ParentID, base.Created, base.Updated
        FROM Items as base
        WHERE base.ID = '11111111-1111-1111-1111-111111111111'	

        UNION ALL
        SELECT CAST(ItemPath + '/' + child.Name AS nvarchar(MAX)),
            child.ID, child.Name, child.TemplateID, child.MasterID, child.ParentID, child.Created, child.Updated
        FROM ItemsTable as parent 
        INNER JOIN Items as child 
            ON child.ParentID = parent.ID 
    SELECT ItemPath, ID, Name, TemplateID, MasterID, ParentID, Created, Updated
    FROM ItemsTable

Running the query below will return the following result:


Item paths in SQL

Once the view is created, queries can be run like the following:

--Returns all descendants of the /sitecore/template item

FROM ItemsPath
WHERE ItemPath LIKE '/sitecore/templates%'

--Returns all rows in the WorkflowHistory table for all 
--descendants of the news item (/sitecore/content/Home/News)

SELECT	 WorkflowHistory.*
FROM WorkflowHistory
JOIN dbo.ItemsPath ON ItemsPath.ID = WorkflowHistory.ItemID
WHERE ItemPath LIKE '/sitecore/content/Home/News%'