子查询返回了 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
我现在必须 一旦该人批准了休假,通知必须发送给另一个报告人,然后批准休假,然后员工可以去这所房子
我建议您获取每个查询和子查询,并对其进行单独测试,直到检测到导致问题的查询和子查询
同样在查询的这一部分中...
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
进行检查