将购买列表从旧数据库复制到新数据库时的错误消息,msg 512,级别16

时间:2015-03-19 13:34:09

标签: sql-server database tsql

当我尝试执行此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

1 个答案:

答案 0 :(得分:2)

使用.. top 1max()

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 )