如果选择错误“子查询返回的值超过1”

时间:2014-06-10 10:37:00

标签: sql sql-server tsql

IF (
     SELECT 
            Employees.AnnualDayHollidayAllowance - Employees.TotalHolidaysDaysTaken 
            AS HolidaysRemaining
            FROM Employees) <= 0
     BEGIN
     PRINT  'You have not got enough holidays'
     END
Else

INSERT INTO  RequestedHolidays (Reason,StartDate,EndDate,EmployeeID)
VALUES       (@Reason,@StartDates,@EndDates,@EmployeeID);

任何人都可以帮我解决这个因为这个而收到的错误消息^,我不确定自己是什么意思

  

子查询返回的值超过1。当子查询遵循=,!=,&lt;,&lt; =,&gt;,&gt; =或子查询用作表达式时,不允许这样做。

3 个答案:

答案 0 :(得分:3)

信息很清楚。 if中的子查询返回多行。也许这就是你想要的:

IF (SELECT sum(Employees.AnnualDayHolidayAllowance - Employees.TotalHolidaysDaysTaken )
    FROM Employees) <= 0

或:

IF (SELECT sum(Employees.AnnualDayHolidayAllowance - Employees.TotalHolidaysDaysTaken )
    FROM Employees
    WHERE employeeid =  @employeeıd
   ) <= 0

答案 1 :(得分:1)

在第一个SQL中,您从WHOLE表Employees中选择行 我想你只需要当前的员工吗?:

IF (
     SELECT 
            SUM(Employees.AnnualDayHollidayAllowance 
                - Employees.TotalHolidaysDaysTaken) 
            AS HolidaysRemaining
            FROM Employees
            WHERE ID = @EmployeeID) <= 0
     BEGIN
     PRINT  'You have not got enough holidays'
     END
Else

INSERT INTO  RequestedHolidays (Reason,StartDate,EndDate,EmployeeID)
VALUES       (@Reason,@StartDates,@EndDates,@EmployeeID);

答案 2 :(得分:1)

查询

SELECT 
            Employees.AnnualDayHollidayAllowance - Employees.TotalHolidaysDaysTaken 
            AS HolidaysRemaining
            FROM Employees

返回几个记录,例如

10
11
12

它不是一个数字,因此它可以比较它。您应该以只返回1条记录的方式更改查询。类似的东西:

SELECT Top (1)
            Employees.AnnualDayHollidayAllowance - Employees.TotalHolidaysDaysTaken 
            AS HolidaysRemaining
            FROM Employees
相关问题