-2
    ALTER PROCEDURE Dashbord @userid INT 
AS 
  BEGIN 
      DECLARE @reportmanager INT 
      DECLARE @admintype INT 

      SET @reportmanager = (SELECT Count(managerid) 
                            FROM   reportingperson 
                            WHERE  employeeid = @userid) 
      SET @admintype = (SELECT Max(admintype) 
                        FROM   employee 
                        WHERE  content_id = @userid) 

      IF EXISTS (SELECT 1 
                 WHERE  @reportmanager > 0 
                        AND @admintype = 0) 
        BEGIN 
            SELECT b.contentid, 
                   x.content_id, 
                   x.employeename, 
                   x.imagetype, 
                   CONVERT(VARCHAR(10), b.fromdate, 126)    AS fromdate, 
                   CONVERT(VARCHAR(10), b.todate, 126)      AS Todate, 
                   b.leaveapp, 
                   b.leavesubject, 
                   b.reason, 
                   ( CASE 
                       WHEN ( b.status = 0 ) THEN 'Pending' 
                       ELSE 'Approved' 
                     END )                                  AS status, 
                   CONVERT(VARCHAR(10), b.createddate, 126) AS Createddate 
            FROM   leaves b 
                   LEFT OUTER JOIN employee x 
                                ON b.employeeid = x.content_id 
            WHERE  ( b.employeeid = @userid ) 
                   AND b.status = 0 

            SELECT admintype 
            FROM   employee 
            WHERE  content_id = @userid 
        END 
      ELSE 
        BEGIN 
            SELECT b.contentid, 
                   x.content_id, 
                   x.employeename, 
                   x.imagetype, 
                   CONVERT(VARCHAR(10), b.fromdate, 126)    AS fromdate, 
                   CONVERT(VARCHAR(10), b.todate, 126)      AS Todate, 
                   b.leaveapp, 
                   b.leavesubject, 
                   b.reason, 
                   ( CASE 
                       WHEN ( b.status = 0 ) THEN 'Pending' 
                       ELSE 'Approved' 
                     END )                                  AS status, 
                   CONVERT(VARCHAR(10), b.createddate, 126) AS Createddate 
            FROM   leaves b 
                   LEFT OUTER JOIN employee x 
                                ON b.employeeid = x.content_id 
            WHERE  b.employeeid IN (SELECT employeeid 
                                    FROM   reportingperson 
                                    WHERE  managerid = @userid) 
                   AND b.status = 0 

            SELECT admintype 
            FROM   employee 
            WHERE  content_id = @userid 
        END 
  END 

我必须现在,一旦该人批准请假,通知必须发送给另一个报告人,然后批准请假,然后员工可以去这所房子

4

1 回答 1

0

我建议您获取每个查询和子查询,并自行对其进行测试,直到您检测到导致问题的那个

同样在这部分查询中......

left outer join employee x on b.employeeid=x.content_id
where (b.employeeid=@userid 
) and b.status=0

如果您正在执行连接on b.employeeid=x.content_id,那么为什么要添加 WHERE两个条件都在检查可能导致某些意外行为b.employeeid=@userid的同一字段b.employeeid

于 2013-09-17T14:57:18.027 回答