如题
===========================================================================
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

解决方案 »

  1.   

    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
      

  2.   

    上面字段扒错了.
    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_TypeLookUser
    SELECT typeID,lookuser FROM FeiliOA_DocumentManage_TypeLookUser WHERE lookuser=@user
    UNION ALL
    SELECT typeID,CASE WHEN lookuser='ALL' THEN @user END FROM FeiliOA_DocumentManage_TypeLookUser
    --
    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