【问题标题】:Error message while duplicating purchasing lists from old database to a new database, msg 512, level 16将采购清单从旧数据库复制到新数据库时出现错误消息,消息 512,级别 16
【发布时间】: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

'

【问题讨论】:

标签: sql-server database tsql


【解决方案1】:

使用..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 )

或者, 因为@NewWebuserNo 是一个整数

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 )

【讨论】:

  • 谢谢我会测试一下:)
  • 嗨,这确实有效,它删除了错误消息,但我仍然在复制每个文件时遇到问题,所以我必须手动执行一些操作,其中一些只有在我实际登录该帐户后才能工作
猜你喜欢
  • 2017-03-16
  • 2021-05-18
  • 2020-07-13
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 2013-03-05
  • 1970-01-01
相关资源
最近更新 更多