我有以下SQL查询:
Declare @Total_SysDown as int,
@Login_SysDown as int
Set @Total_SysDown = (SELECT SCHED_SYS_DOWN FROM AGT_SC AS S)
Set @Login_SysDown = (SELECT SYS_DOWN FROM AGT_AC AS A)
Insert Into dbo.DATA(DATE,ID,LNAME,FNAME,Total_SysDown,Login_SysDown)
Select C.DATE,C.ID,E.Last_Name,E.First_Name,@Total_SysDown @Login_SysDown
From dbo.AGT as C Inner Join dbo.EMP as E ON C.ID = E.ID
Group by C.ID,C.DATE,E.Last_Name,E.First_Name
这个或只是带有Select语句的变量给出了一个返回超过1值的子查询错误。据我所知,这意味着我应该一次插入一条记录,但我不确定如何做到这一点。我应该加入一段时间的声明,或者我的变量实际上是否真的阻碍了我?
答案 0 :(得分:4)
至少有一个查询:
(SELECT SCHED_SYS_DOWN FROM AGT_SC AS S)
(SELECT SYS_DOWN FROM AGT_AC AS A)
返回多于1行,因此您无法将其分配给标量变量。
作为临时解决方案,您可以执行SELECT TOP 1
以确保每个查询最多返回一行。
答案 1 :(得分:1)
我认为问题根本不在于您的INSERT语句。
您的问题出在SET语句中。 SELECT SCHED_SYS_DOWN FROM AGT_SC AS S
语句或其他语句返回多个值。
使用SET时,您将为变量分配一个值。您的SELECT返回多个值。将查询更改为仅返回一行。
答案 2 :(得分:1)
您收到此错误是因为您的子查询返回了多条记录:
Set @Total_SysDown = (SELECT SCHED_SYS_DOWN FROM AGT_SC AS S)
Set @Login_SysDown = (SELECT SYS_DOWN FROM AGT_AC AS A)
要在此处使用变量,您需要确保通过使用WHERE子句,TOP 1或其他内容从查询中仅返回一条记录。我无法通过您的示例来确定,但听起来您应该将这些表连接到SELECT查询。
SELECT ...
FROM dbo.AGT agt
INNER JOIN AGT_SC sc
ON sc.<joining column> = <joining table>.<joining column>
INNER JOIN AGT_AC ac
ON ac.<joining column> = <joining table>.<joining column>