SQL中树形分层数据的查询优化
作者:网络转载 发布时间:[ 2015/4/9 12:03:44 ] 推荐标签:数据库 SQL Server 数据结构
2.1 TIP
Exception message: DataReader.GetFieldType(4) returned null. Exception data: System.Collections.ListDictionaryInternal
注意,极有可能我们把字段更新上去后,我们的程序却出错了,如上。这个时候,我们需要把
C:Program FilesMicrosoft SQL Server100SDKAssembliesMicrosoft.SqlServer.Types.dll
这个DLL打包到我们的应用程序中去。原因不解释了。
看看效果吧,修改过后的代码为:
DECLARE @tmpIds hierarchyid
SELECT @tmpIds=Pids FROM EL_Organization.Organization WHERE ID='ecc43c7159924dca91e2916368f923f4';
WITH CTEGetChild AS (
SELECT * FROM EL_Organization.Organization WHERE ID='ecc43c7159924dca91e2916368f923f4'
UNION ALL(
SELECT * FROM EL_Organization.Organization WHERE Pids.IsDescendantOf(@tmpIds)=1
)
)
SELECT * FROM CTEGetChild
现在,我们的时间到了1S内。
2.2 一切为了不动应用层代码
现在,既然,增加了一个字段,我们要维护这个字段,如:本条记录在应用程序中被移动到了别的父级下,需要更新这个字段。为了不动上层代码,能做的是创建触发器,即:原有的ParentId变动的时候,需要更新这个PIds字段,于是,我们创建触发器如下:
create trigger UpdateOrgPIds
on EL_Organization.Organization
after update
as
if update ([ParentId])
begin
declare @tmpId varchar(36)
select @tmpId=id from inserted
update EL_Organization.Organization set pids=dbo.f_cidname(@tmpId)
end
go
-- drop trigger EL_Organization.UpdateOrgPIds
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
在测试数据库性能时,需要注意哪些方面的内容?测试管理工具TC数据库报错的原因有哪些?怎么解决?数据库的三大范式以及五大约束编程常用的几种时间戳转换(java .net 数据库)优化mysql数据库的几个步骤数据库并行读取和写入之Python实现深入理解数据库(DB2)缓冲池(BufferPool)国内三大云数据库测试对比预警即预防:6大常见数据库安全漏洞数据库规划、设计与管理数据库-事务的概念SQL Server修改数据库物理文件存在位置使用PHP与SQL搭建可搜索的加密数据库用Python写一个NoSQL数据库详述 SQL 中的数据库操作详述 SQL 中的数据库操作Java面试准备:数据库MySQL性能优化

sales@spasvo.com