【发布时间】:2015-04-26 12:37:15
【问题描述】:
我已经搜索了一段时间,它们是我的问题的多个条目,它们无法帮助我查明我的语法问题。
错误是
选择列表中只能指定一个表达式,当 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());
【问题讨论】:
-
@Allan,错误信息相同,但导致问题的原因不同。 :)
-
@David,诚然,这是分配与比较,但问题的根源是相同的:子查询提供了多个列,而预期单个列。
-
感谢大家的意见。是的,它和许多其他人一样,但很难理解错误消息。 “子查询提供了多个列,其中需要一个列。”是我理解错误所需要的。
标签: sql sql-server