插入使用变量

时间:2011-09-08 19:11:20

标签: sql sql-server sql-server-2005

我有以下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值的子查询错误。据我所知,这意味着我应该一次插入一条记录,但我不确定如何做到这一点。我应该加入一段时间的声明,或者我的变量实际上是否真的阻碍了我?

3 个答案:

答案 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>