如何从Sitecore主数据库获取项目路径?

如何从Sitecore主数据库获取项目路径?,sitecore,sitecore6,Sitecore,Sitecore6,我有一个直接的SQL查询来从数据库中提取一些特定的项。可以获取我感兴趣的ItemID和字段名。。。但是我想给我的编辑器项目的路径,而不是让他们搜索项目ID。如何通过SQL查询获得此路径?作为记录,以下是我当前的查询: SELECT ItemId, Language, Value, I.Name FROM Fields F JOIN Items I ON F.FieldId = I.ID WHERE Value LIKE '%style="color: #999999%' ORDER BY L

我有一个直接的SQL查询来从数据库中提取一些特定的项。可以获取我感兴趣的ItemID和字段名。。。但是我想给我的编辑器项目的路径,而不是让他们搜索项目ID。如何通过SQL查询获得此路径?作为记录,以下是我当前的查询:

SELECT ItemId, Language, Value, I.Name FROM Fields F 
JOIN Items I ON F.FieldId = I.ID
WHERE Value LIKE '%style="color: #999999%' 
ORDER BY Language, ItemID

我让一些翻译人员在内容编辑器中错误地复制和粘贴HTML,而这些多余的样式标记在许多地方都是免费提供的。我想获得受影响项目的完整列表(带有内容树路径)。DB模式是Sitecore 6.6。

我强烈建议编写一个实用程序,将Sitecore的API用于这类工作。如果您已经安装了Sitecore PowerShell()之类的工具,那么使用它也是一个不错的选择

尽管如此,下面的博文将为您提供一个在SQL中创建函数以轻松获取ItemPath的示例


实际上,不建议在MS SQL级别对Sitecore数据进行任何操作。最好通过Sitecore API找到解决此问题的方法

但是,您可以使用递归SQL查询获取项的路径:

with Items1 (nm, id1, pathstr)
as (select Name, id, cast('/sitecore' as nvarchar(MAX)) 
   from Items
   where ParentID = '00000000-0000-0000-0000-000000000000'
union all
   select Items.Name, Items.id, Items1.pathstr +'/'+ Items.Name
   from Items 
     inner join Items1 on Items1.id1 = Items.ParentID) 
select id1 as ItemId, nm as Name, pathstr as [Path], F.Id as FieldId, F.Value as FieldValue
from Items1 I
JOIN Fields F ON F.ItemId = I.id1
WHERE Value LIKE '%style="color: #999999%' 
ORDER BY Language, ItemID
由于路径未另存为字段,因此需要递归查询


请注意,查询是针对Sitecore 7.2的,我的计算机上没有Sitecore 6.6。如果存在任何差异,您可以调整Sitecore 6.6的此查询。

正如@Anton提到的,Sitecore不支持直接查询数据库,因此通常不建议这样做

如果您位于Sitecore桌面,则可以使用开发人员中心内的XPath Builder执行查询以检索这些项目。在下面的示例中,将@YourFieldName更改为相关字段名

/sitecore/content//*[contains(@YourFieldName, 'style="color: #999999')]