首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

拜托各位大侠帮小弟我优化一个存储过程,

2012-02-16 
拜托各位大侠帮我优化一个存储过程,急!!!如题

拜托各位大侠帮我优化一个存储过程,急!!!
如题
===========================================================================
CREATE   PROCEDURE   selectAllOpenDocumentsInfo
@user   varchar(50),@dept   varchar(50),@lv   varchar(50)  
AS
select   a.documentID,a.documentName,e.typeName,a.documentInfo,a.VesionIDUser,a.vesionId,a.vesionDate,a.documentSize,a.documentSend,a.documenttype,
                    a.documenturl
from   FeiliOA_DocumentManage_DocumentInfo   a,FeiliOA_DocumentManage_TypeLookUser   b,
                FeiliOA_DocumentManage_TypeLookDept   c,FeiliOA_DocumentManage_TypeLookLv   d,
                FeiliOA_DocumentManage_TypeInfo   e
where   ((a.DocumentType=b.typeID   and   (b.lookuser=@user   or   b.lookuser= 'ALL '))  
            or   (a.DocumentType=c.typeID   and   (c.lookdept=@dept   or   c.lookdept= 'ALL '))
            or(a.DocumentType=d.typeID   and   (d.looklv=@lv   or   d.looklv= 'ALL ')))   and   e.typeid=a.documenttype   and   a.documentStatic= 'a '
group   by   a.documentID,a.documentName,e.typeName,a.documentInfo,a.VesionIDUser,a.vesionId,a.vesionDate,a.documentSize,a.documentSend,
                              a.documenttype,a.documenturl

[解决办法]
CREATE PROCEDURE selectAllOpenDocumentsInfo
@user varchar(50),
@dept varchar(50),
@lv varchar(50)
--建临时表整理带 'all '字样的数据与变量到一个集合中
CREATE TABLE #FeiliOA_DocumentManage_TypeLookUser(typeID INT,lookuser VARCHAR(50))
INSERT INTO #FeiliOA_DocumentManage_TypeLookLv
SELECT typeID,lookuser FROM FeiliOA_DocumentManage_TypeLookLv WHERE lookuser=@user
UNION ALL
SELECT typeID,CASE WHEN lookuser= 'ALL ' THEN @user END FROM FeiliOA_DocumentManage_TypeLookLv
--
CREATE TABLE #FeiliOA_DocumentManage_TypeLookDept(typeID INT,lookdept VARCHAR(50))
INSERT INTO #FeiliOA_DocumentManage_TypeLookDept
SELECT typeID,lookdept FROM FeiliOA_DocumentManage_TypeLookDept WHERE lookdept=@dept
UNION ALL
SELECT typeID,CASE WHEN lookdept= 'ALL ' THEN @dept END FROM FeiliOA_DocumentManage_TypeLookDept
--
CREATE TABLE #FeiliOA_DocumentManage_TypeLookLv(typeID INT,looklv VARCHAR(50))
INSERT INTO #FeiliOA_DocumentManage_TypeLookLv
SELECT typeID,looklv FROM FeiliOA_DocumentManage_TypeLookLv WHERE looklv=@lv
UNION ALL
SELECT typeID,CASE WHEN looklv= 'ALL ' THEN @lv END FROM FeiliOA_DocumentManage_TypeLookLv
--将表关联
SELECT a.documentID,a.documentName,e.typeName,a.documentInfo,a.VesionIDUser,a.vesionId,a.vesionDate,a.documentSize,a.documentSend,a.documenttype,a.documenturl
FROM
FeiliOA_DocumentManage_DocumentInfo a INNER JOIN #FeiliOA_DocumentManage_TypeLookUser b
ON a.DocumentType=b.typeID AND b.lookuser=@user AND a.documentStatic= 'a ' INNER JOIN FeiliOA_DocumentManage_TypeInfo e
ON e.typeid=a.documenttype
UNION ALL
SELECT a.documentID,a.documentName,e.typeName,a.documentInfo,a.VesionIDUser,a.vesionId,a.vesionDate,a.documentSize,a.documentSend,a.documenttype,a.documenturl
FROM
FeiliOA_DocumentManage_DocumentInfo a INNER JOIN
FeiliOA_DocumentManage_TypeLookDept c
ON a.DocumentType=c.typeID and c.lookdept=@dept AND a.documentStatic= 'a ' INNER JOIN FeiliOA_DocumentManage_TypeInfo e
ON e.typeid=a.documenttype
UNION ALL
SELECT a.documentID,a.documentName,e.typeName,a.documentInfo,a.VesionIDUser,a.vesionId,a.vesionDate,a.documentSize,a.documentSend,a.documenttype,a.documenturl


FROM
FeiliOA_DocumentManage_DocumentInfo a INNER JOIN
#FeiliOA_DocumentManage_TypeLookLv d
ON a.DocumentType=d.typeID and d.looklv=@lv AND a.documentStatic= 'a ' INNER JOIN FeiliOA_DocumentManage_TypeInfo e
ON e.typeid=a.documenttype

--删除临时表
DROP TABLE #FeiliOA_DocumentManage_TypeLookUser
DROP TABLE #FeiliOA_DocumentManage_TypeLookDept
DROP TABLE #FeiliOA_DocumentManage_TypeLookLv--此过程没有用group by

热点排行