当我尝试执行此sql脚本时,我继续收到此错误消息: 消息512,级别16,状态1,行12 子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
我们要做的是将一些客户存储的一些采购清单从一个旧数据库复制到一个新数据库,这在某些方面在转移到我们几周前制作的新数据库时丢失了,所以我们制作了这个脚本,它适用于几个客户,但对于某些客户来说,它只是获取了我用粗体写的错误代码。
我确实找到了一些旧的答案,但我无法完全按照自己的方式工作,所以我希望你们中的一些人可以伸出援助之手,因为我无法手动复制数千个客户购买清单,需要一些时间。
Declare @OldWebuserNo INT
Declare @NewWebuserNo INT
Declare @OldCustNo INT
Declare @ZpiderOrderNo INT
/* Sett kundenummeret som skal endres for*/
SET @OldCustNo = 12001
while @OldCustNo <= 80000
BEGIN
/* Henter ut det nye webusernummeret for kunden */
use ZF0010
select @NewWebuserNo = ( select ZpiderOrder.WebUserNo
from ZF0010.WebUser
join ZF0010.ZpiderOrder On ZF0010.ZpiderOrder.WebUserNo = ZF0010.WebUser.WebuserNo
where CustomerNo = @OldCustNo )
/* Lister ut ordrenummer på kunden med gammelt webusernummer til en midlertidig tabell, og oppdaterer WebuserNo på ordrene*/
use ZF0001
DECLARE @MyCursor CURSOR;
DECLARE @MyField INT;
BEGIN
SET @MyCursor = CURSOR FOR
select ZpiderOrderNo
from ZF0001.ZpiderOrder
join ZF0001.WebUser On ZF0001.ZpiderOrder.WebUserNo= ZF0001.WebUser.WebuserNo
where CustomerNo = @OldCustNo
OPEN @MyCursor
FETCH NEXT FROM @MyCursor
INTO @MyField
WHILE @@FETCH_STATUS = 0
BEGIN
update ZF0010.ZF0010.ZpiderOrder
set WebUserNo = @NewWebuserNo
where ZpiderOrderNo = @MyField
FETCH NEXT FROM @MyCursor
INTO @MyField
END;
CLOSE @MyCursor ;
DEALLOCATE @MyCursor;
END
/* Lister ut ordrene som hører til kunden etter operasjonen er kjørt */
use ZF0010
select ZF0010.ZpiderOrder.WebUserNo, ZF0010.WebUser.CustomerNo, ZpiderOrderNo, ZF0010.WebUser.Name
from ZF0010.ZpiderOrder
join ZF0010.WebUser On ZF0010.ZpiderOrder.WebUserNo= ZF0010.WebUser.WebuserNo
where ZF0010.ZpiderOrder.WebUserNo = @NewWebuserNo
SET @OldCustNo = @OldCustNo + 1
END
答案 0 :(得分:2)
使用.. top 1
或max()
select @NewWebuserNo = (select top 1 ZpiderOrder.WebUserNo
from ZF0010.WebUser
join ZF0010.ZpiderOrder On ZF0010.ZpiderOrder.WebUserNo = ZF0010.WebUser.WebuserNo
where CustomerNo = @OldCustNo )
OR,
因为@NewWebuserNo
是一个int数
select @NewWebuserNo = (select max(CAST(ISNULL(ZpiderOrder.WebUserNo,0) AS INT))
from ZF0010.WebUser
join ZF0010.ZpiderOrder On ZF0010.ZpiderOrder.WebUserNo = ZF0010.WebUser.WebuserNo
where CustomerNo = @OldCustNo )