【发布时间】:2015-05-22 15:38:09
【问题描述】:
您好,当我尝试执行此 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
'
【问题讨论】:
-
这看起来像 TSQL 代码。为什么是 MySQL 标签?
-
你说得对,我会改的
标签: sql-server database tsql