2015-02-24 3 views
2

Я искал, когда их несколько записей для моей проблемы, они не помогают мне в определении моей синтаксической проблемы.Пользователь существует в SQL

ошибка

только одно выражение может быть указан в списке выбора, когда подзапрос не вводится с EXISTS.

Вот мой код

DECLARE @NewUserID INT; 
DECLARE @OldUserID INT; 
DECLARE @CID INT; 
DECLARE @NewMar VARCHAR; 
DECLARE @LocalUserID INT; 
DECLARE @CallDate DATETIME; 

SET @OldUserID = 1891 
SET @NewUserID = 1868; 
SET @CID = (SELECT TOP 1 * 
      FROM contact 
      WHERE EXISTS (SELECT TOP 1 mar 
          FROM marselect 
          WHERE userid = @OldUserID 
            AND mar NOT LIKE '%branch%') 
      ORDER BY NEWID()); 

SET @LocalUserID = 1868; 
SET @CallDate = '1900-01-01 00:00:00.000'; 


--move account to new owner-- 
UPDATE contact 
SET mar = (SELECT TOP 1 * 
       FROM marselect 
       WHERE userid = @NewUserID) 
WHERE contactid = @cid; 

--add history to the account-- 
INSERT INTO ContactHistory 
      (contactid, 
      historydate, 
      contactResultID, 
      UserID, 
      ActivityType, 
      Note, 
      StartTime, 
      Endtime, 
      CampaignID, 
      QtyPhones) 
VALUES  (@CID, 
      GETDATE(), 
      96, 
      @LocalUserID, 
      'Move', 
      'Account Reassigned to ' + @NewMar + '', 
      GETDATE(), 
      GETDATE(), 
      0, 
      NULL); 

--add callback to the account-- 
INSERT INTO callback 
      (contactid, 
      userid, 
      contacthistoryid, 
      contactLabelRequestID, 
      callbackDate, 
      LastcontacthistoryID, 
      lastattempt, 
      closed, 
      closeddate, 
      closeduserid, 
      callbacktype, 
      insertdate, 
      callnote, 
      hastime) 
VALUES  (@CID, 
      @NewUserID, 
      0, 
      NULL, 
      @CallDate, 
      0, 
      NULL, 
      0, 
      NULL, 
      NULL, 
      'Call', 
      GETDATE(), 
      'Call created automatically after account reassigned', 
      0) 

Я не понять, почему мой запрос не работает. Он работает как отдельный запрос, но когда я использую его в этом смысле, он не работает. У меня есть другие ошибки одного и того же типа в коде, но я полагаю, что, если я смогу понять и решить проблему, я уверен, что могу разрешить другие.

ошибка на этой линии-

set @CID = (select top 1 * from contact where exists (select top 1 mar from marselect where userid = @OldUserID and mar not like '%branch%') order by newid()); 
+0

Возможный дубликат [Только одно выражение может быть указано в списке выбора, если подзапрос не является представленный с помощью EXISTS] (http://stackoverflow.com/questions/1904314/only-one-expression-can-be-specified-in-the-select-list-when-subquery-is-not) – Allan

+0

@Allan , сообщение об ошибке одно и то же, но причины, вызвавшие проблему, различны. :) – David

+0

@David, По общему признанию, это назначение и сравнение, но источник проблемы одинаков: подзапрос предоставляет несколько столбцов, где ожидается один столбец. – Allan

ответ

3

Удалить * и держать column name, что вы хотите назначить @CID

И нет никакого смысла в сохранении top 1 внутри exists

set @CID = 
(
select top 1 CID --here remove * and keep column name 
from contact 
where exists (select mar -- Removed Top 1 here 
       from marselect 
       where userid = @OldUserID and mar not like '%branch%') 
order by newid() 
); 
Смежные вопросы