Вставить в использование переменных - PullRequest
0 голосов
/ 08 сентября 2011

У меня следующий запрос 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 выдают ошибку Subquery, возвращаемую, чем 1 значение. Из того, что я понимаю, это означает, что я должен вставлять одну запись за раз, но я не уверен, как это сделать. Есть ли какое-то утверждение, которое я должен вставить, или мои переменные действительно мешают мне вообще?

Ответы [ 3 ]

4 голосов
/ 08 сентября 2011

Хотя бы один из запросов:

(SELECT SCHED_SYS_DOWN FROM AGT_SC AS S)
(SELECT SYS_DOWN FROM AGT_AC AS A)

возвращает более 1 строки, поэтому вы не можете присвоить ее скалярной переменной.

В качестве временного решения вы можете выполнить SELECT TOP 1, чтобы каждый запрос возвращал не более одной строки.

1 голос
/ 08 сентября 2011

Вы получаете эту ошибку, потому что ваши подзапросы возвращают более одной записи:

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>
1 голос
/ 08 сентября 2011

Я не думаю, что проблема с вашим утверждением INSERT вообще.

Ваша проблема в SET-заявлениях. Оператор SELECT SCHED_SYS_DOWN FROM AGT_SC AS S или другой оператор возвращает более одного значения.

Когда вы используете SET, вы присваиваете ОДНО значение для переменной. Ваш SELECT возвращает несколько значений. Измените свой запрос, чтобы он возвращал только одну строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...