100分求帮忙优化SQL,多谢!!!
初学SQL, 为了达到项目目的,写了以下SQL,用了4个游标嵌套,忘大哥们帮忙优化一下以提高性能,谢谢!
代码如下:
说明:用到的主表:ORGGroupDeptH,存储的是人事组织架构.
最后达到的目的是要这样的结构:
編號 第二層 第三層 第四層 第五層 序號 級別 名稱
fn0101000000 系統資訊系
fn0101000001 1 董事 高級經理
fn0101000002 軟件開發部
fn0101000000 1 集團董事 經理
fn0101000000 2 集團董事 系統分析員
fn0101000000 3 集團董事 高級應用程序員
fn0101000000 4 集團董事 應用程序員
fn0101000000 網絡系統部
fn0101000000 1 集團董事 網絡系統部
谢谢大家!
Create table #OrgInfo
(
intNo smallint IDENTITY(1,1), nvrFunctionNo nvarchar(12),twiceLvl nvarchar(100),thirdLvl nvarchar(100),
forthLvl nvarchar(100),fifthLvl nvarchar(100),orderNo varchar(10),titleClass nvarchar(100),funcTitle nvarchar(100)
)
--drop table #OrgInfo
--select * from #OrgInfo
SET NOCOUNT ON
--定义变量
DECLARE @functionNo varchar(12),@twiceLvl varchar(100),@thirdLvl varchar(100),
@forthLvl varchar(100),@fifthLvl varchar(100),@orderNo int,@titleClass varchar(100),@funcTitle varchar(100)
--定义第二层游标
DECLARE twiceLvlCursor CURSOR
FOR SELECT nvrFunctionNo FROM ORGGroupDeptH WHERE intDeptLv=2 ORDER BY bitIsDept,nvrInterface,intOrderNo
OPEN twiceLvlCursor
FETCH NEXT FROM twiceLvlCursor
INTO @functionNo
WHILE @@FETCH_STATUS = 0
BEGIN
print '第二層functionNo '+@functionNo
--查询出相关值
SELECT @funcTitle=nvrNameC FROM ORGGroupDeptH where nvrFunctionNo=@functionNo
--插入第二层部门
INSERT INTO #OrgInfo(nvrFunctionNo,twiceLvl,thirdLvl,forthLvl,fifthLvl,orderNo,titleClass,funcTitle)
VALUES(@functionNo,@funcTitle, ' ', ' ', ' ', ' ', ' ', ' ')
--定义第三层游标值
DECLARE thirdLvlCursor CURSOR
FOR SELECT nvrFunctionNo FROM ORGGroupDeptH WHERE (intDeptLv=3 or intDeptLv IS NULL) AND nvrPFunctionNo=@functionNo ORDER BY bitIsDept,intOrderNo
OPEN thirdLvlCursor
FETCH NEXT FROM thirdLvlCursor INTO @functionNo
WHILE @@FETCH_STATUS = 0
BEGIN
--set @functionNo= 'fn0201000000 '
--如果是职位
print '第三層functionNo '+@functionNo
IF (SELECT bitIsDept FROM ORGGroupDeptH WHERE (intDeptLv=3 or intDeptLv is null) AND nvrFunctionNo=@functionNo)=0
BEGIN
SELECT @funcTitle=h.nvrNameC,@orderNo=h.intOrderNo,@titleClass=t.nvrNameC FROM ORGGroupDeptH h
I