您的位置:首页> 日志> 动易系统 正文

SQL批量将 “单页”栏目 修改为 “容器”栏目

      这个月接到一个“****政府”项目,为其政府输出68个子站,其中栏目结构和名称几乎雷同,其实就分类“乡镇子站”和“局级子站”两种类型!由于添加栏目节点前根据栏目表要求按节点类型添加所有节点,可未曾想到我们的系统在栏目管理权限中竟然只支持“容器”类型栏目的管理、对“单页”、“外链”类型的栏目都不支持权限分配!就这样稀里糊涂的被坑了!好了,也许是自己见识少吧,这样心里就安慰多了!回头看看,丫的几百个单页节点,要是重新删除,再添加这是不可能的!!工作量太大!因此就偷懒了,经过请教高手,最后经过一番折腾,用SQL语句搞定此任务!好了,废话说完了,该进入正题了!下面处理的过程,可能有些烦躁!

第一,首先处理一个“单页”栏目变成“容器”栏目,目的,从中找到规律,看它缺乏什么东西,好在以后一次批量替换完成!

如下图,先找这个“家伙”做实验

栏目节点为10,搞个sql测试下,如下:

update [testhsx1].[dbo].[PE_Nodes] set NodeType =1 where NodeId =10;

执行下搞定,正常已经换过了吧!----个人感觉!现在我们到后台看看!可惜后台出现这坑爹的结果!如下图:

如上图:刷新栏目,左侧已经看到将栏目类型改过来了,但是点击它,坑爹的,右侧还是”单页“的类型!

然后请教一下前端组里的高手们,原来要”清除节点设置缓存“才行!好吧,我做一下!呦西,再刷新下栏目看到以下结果,如下图:

好了,看上面两个图,我们是否发现三个问题所在;

(1)栏目的目录名 没有,但是栏目标识符存在,正常情况两个是相等的;

(2)栏目列表页模板木有,这个可是必须要有的,但是栏目首页模板在,嘿嘿,有点眉目;

(3)改成”容器“类型栏目,那就得有”内容模型“了吧;看了下也木有。

三个问题发现完毕!那接下来就得解决它!

解决问题呢,先找个数据库文档,找到 栏目的目录名和栏目列表页模板 的字段名是什么!

通过查询得知,如下图:

    两个问题发现完毕,第三”内容模型“的问题呢,自己思考了下,也问了下高手们,发现还是用后台的批量设置好点!毕竟调用的内容模板不一致!

好了通过上面的观察和请教,大概知道了会出现的问题,和需要解决的问题所在,我们就开始批量修改吧!

 

第二:编写SQL语句,批量修改”单页“栏目为”容器“栏目;

 (1)首先查询下所有单页节点

  1. SELECT [NodeID] 
  2.       ,[NodeIdentifier] 
  3.       ,[NodeDir] 
  4.       ,[NodeType] 
  5.       ,[NodeName] 
  6.       ,[DefaultTemplateFile] 
  7.       ,[ContainChildTemplateFile] 
  8.   FROM [testhsx1].[dbo].[PE_Nodes] where NodeType =3  and nodeID !=-2 

 

结果如下图:

查询一番,都是我要修改的!

(2)书写修改sql语句:

  1. update [testhsx1].[dbo].[PE_Nodes]  
  2.     set [NodeDir] =[NodeIdentifier] 
  3.         ,[ContainChildTemplateFile]=[DefaultTemplateFile]  
  4.     where NodeType =3 and nodeID !=-2 

结果如下图:

修改完毕,两个字段分别已经赋值了,现在看上面的红色框内,发现就两种模板名称,那么有木有办法就将这两个模板名称替换了呢?应该有的,相信它,好吧,我先请教了一下高手们,结果得到的答案REPLACE函数!知道函数名,那么就该知道怎么用,这是基本功不懂就问 度娘,嘿嘿!

(3)sql替换”模板名称“

  1. update [testhsx1].[dbo].[PE_Nodes]  
  2.     set DefaultTemplateFile=REPLACE(DefaultTemplateFile, '通用-单页''通用-跳转到栏目下最新的信息'
  3.         , ContainChildTemplateFile=REPLACE(ContainChildTemplateFile, '通用-单页''通用-跳转到栏目下最新的信息'
  4.     where NodeType =3 and nodeID !=-2 
  5.  
  6. update [testhsx1].[dbo].[PE_Nodes]  
  7.     set DefaultTemplateFile=REPLACE(DefaultTemplateFile, '通用-带侧栏单页''通用-跳转到栏目下最新的信息'
  8.         ,ContainChildTemplateFile=REPLACE(ContainChildTemplateFile, '通用-带侧栏单页''通用-跳转到栏目下最新的信息'
  9.     where NodeType =3 and nodeID !=-2 

分别执行后的结果如下图:

好了,左侧不同模板目录未改变,只改变了模板名称,很好!解决问题!

好了剩下最后一步,将”单页“栏目改为”容器“栏目;

  1. update [testhsx1].[dbo].[PE_Nodes] set NodeType=1 where NodeType =3 and nodeID !=-2 

到这里,就已经解决掉第一个和第二个问题,现在点击下”清除节点设置缓存“ 刷新,看看效果吧!

如下图:

好了,现在就剩下批量修改选定内容模板了,这个就不多说了,到此完毕!

说的有点啰嗦,但是呢,这就是处理流程!如有错误,请各位高手赐教!