感谢您查看此内容。
该问题与以下sql查询有关。基本上,它递归地查找某个页面(母版页)下的所有页面,然后将母版页的类别(在xref_pages_categories中查找)应用于所有这些页面。
运行插件后,查询表中应该已插入的数据完全挂起。
如果我在没有插入行的情况下运行查询,结果会完全恢复,如:
3245 490
3249 490
3252 490
但是在将插入放在它前面并插入时,查询pageid = 3245就会挂起。有什么想法吗?
declare @page int;
set @page=3202;
begin transaction transki;
With FindAllPagesUnderneath(PageID, ParentID) as
(
select id as PageID, ParentPageId as ParentID
from pages where id=@page
union all
select id as PageID, ParentPageID as ParentID
from pages p
inner join FindAllPagesUnderneath mp on
p.parentpageid=mp.PageID
)
insert into xref_pages_categories (PageID, CategoryID)
--get records that definitely arent already in xref_pages_categories
select * from
(
select distinct thegood.*
from
(
--get all pages under @page attached to new categoryid
select distinct fap2.PageID, fapo.CategoryID
from FindAllPagesUnderneath fap2
cross join (
select fap.PageID,xpc.categoryid
from xref_pages_categories xpc
inner join FindAllPagesUnderneath fap
on fap.PageID=xpc.pageid
where fap.pageid!=1 and
fap.pageid!=1332
and fap.parentid=1332
) fapo
where fap2.pageid !=@page
) thegood
left outer join xref_pages_categories xpc
on xpc.pageid = thegood.pageid
where xpc.pageid is null
) final
答案 0 :(得分:0)
没有查看所有代码,执行计划或锁定/阻止问题,你可以试试这个黑客:
在CTE之前创建此表:
CREATE TABLE #TempResults
(
PageID ...
,CategoryID ...
)
INSERT到它而不是xref_pages_categories
(使用CTE SELECT)
然后把它放在代码块的末尾:
insert into xref_pages_categories (PageID, CategoryID)
SELECT PageID, CategoryID FROM #TempResults
这个INSERT应该运行得更快,并且希望不像现在作为CTE的一部分那样锁定/阻塞。