2014-09-08 2 views
1

DB에서 특정 항목을 가져 오기위한 직접 SQL 쿼리가 있습니다. 관심있는 ItemID 및 Field 이름을 가져올 수 있지만 항목 ID를 검색하는 대신 편집자에게 항목의 경로를 제공하려고합니다. SQL 쿼리로이 경로를 얻으려면 어떻게해야합니까? Sitecore Master DB에서 항목 경로를 얻으려면 어떻게해야합니까?

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 여러 곳에서 타고 함께 온 및 붙여 넣기 복사했다 : 공식적으로, 여기에 내 현재 쿼리입니다. 영향을받는 Items (내용 트리 경로 포함)의 전체 목록을 얻고 싶습니다. DB 스키마는 Sitecore 6.6입니다.

답변

1

이러한 유형의 작업에 Sitecore의 API를 사용하는 유틸리티를 작성하는 것이 좋습니다. Sitecore PowerShell (https://marketplace.sitecore.net/en/Modules/Sitecore_PowerShell_console.aspx)과 같은 것을 사용하면 이미 설치되어있는 경우에도 좋은 옵션이됩니다.

아래 블로그 게시물은 SQL에서 ItemPath를 쉽게 가져올 수있는 함수를 만드는 예제를 제공합니다.

http://blogs.perficient.com/microsoft/2014/05/sql-querying-sitecore-database-directly-get-fullpath-of-item/

+0

이것은 내가 찾고있는 것입니다. 감사합니다. – Bryan

0

사실, 매우 MS SQL 수준에 Sitecore 데이터에 어떤 조작을 수행하지 않는 것이 좋습니다. Sitecore API를 통해이 문제를 해결하는 방법을 찾는 것이 좋습니다. 경로가 필드로 저장되지 않기 때문에

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 

재귀 쿼리가 필요합니다 : 당신은 재귀 SQL 쿼리를 사용하여 항목의 경로를 얻을 수 그러나

.

P. 쿼리는 Sitecore 7.2 용이며, 내 컴퓨터에 Sitecore 6.6이 없습니다. 차이가있을 경우 Sitecore 6.6에 대해이 쿼리를 조정할 수 있습니다.

0

@Anton에서 언급했듯이 Sitecore는 데이터베이스에 대한 직접 쿼리를 지원하지 않으므로 일반적으로 권장하지 않습니다.

Sitecore 데스크톱에있는 경우 개발자 센터의 XPath 작성기를 사용하여 이러한 항목을 검색하는 쿼리를 수행 할 수 있습니다. 아래 예제에서 @YourFieldName을 관련 필드 이름으로 변경하십시오.

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