子查询返回了 1 个以上的值.当子查询跟在 =、!=、、>= 后面或将子查询用作表达式时,不允许这样做

本文关键字:查询 不允许 这样做 表达式 返回 | 更新日期: 2023-09-27 18:31:42

    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 

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

子查询返回了 1 个以上的值.当子查询跟在 =、!=、、>= 后面或将子查询用作表达式时,不允许这样做

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

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

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进行检查