SQL循环执行但新的旧值被覆盖

时间:2014-07-23 17:02:25

标签: sql sql-server tsql

正如我的问题标题所说,我的程序循环但我更新的所有值都被覆盖了。这是下面发布的代码。假设minRownum为1且最大值为12,我看到循环正确执行12次,每次更新+1。但是在最终结果中,只有我的列中RowNum为12的最后一行有任何值

我不确定为什么覆盖正在发生,因为我说“更新它的rownumber = minrownumber”然后我增加minrownum。

任何人都可以指出我做错了吗?感谢

 WHILE (@MinRownum <= @MaxRownum)
    BEGIN
        print ' here' 
        UPDATE #usp_sec
        set amount=(
        SELECT sum(amount) as amount   
        FROM dbo.coverage
        inner join dbo.owner
        on coverage.api=owner.api
        where RowNum=@MinRownum
        );

        SET @MinRownum = @MinRownum + 1

    END

PS:我编辑了这一行说(下面),现在每个值都有相同的错误号码(它不是不同但是重复了所有。

        set amount = (SELECT sum(amount) as amount   
                      FROM dbo.coverage
                      INNER JOIN dbo.owner ON coverage.api = owner.api
where RowNum=@MinRownum
                     ) WHERE RowNum = @MinRownum;

表:

CREATE TABLE dbo. #usp_sec
(
RowNum int,
amount numeric(20,2),
discount numeric(3,2)
)

CREATE TABLE [dbo].[handler](
    [recordid] [int] IDENTITY(1,1) NOT NULL,
    [covid] [varchar](25) NULL,
    [ownerid] [char](10) NULL
)   

CREATE TABLE [dbo].[coverage](
    [covid] [varchar](25) NULL,
    [api] [char](12) NULL,
    [owncovid] [numeric](12, 0) NULL,
    [amount] [numeric](14, 2) NULL,
    [knote] [char](10) NULL
)

CREATE TABLE [dbo].[owner](
    [api] [char](12) NOT NULL,
    [owncovid] [numeric](12, 0) NULL,
    [ownerid] [char](10) NOT NULL,
    [officer] [char](20) NOT NULL,
    [appldate] [date] NOT NULL
    )

1 个答案:

答案 0 :(得分:3)

您的UPDATE语句需要自己的WHERE子句。否则,每个UPDATE将更新表中的每一行。

你编写的方式,你的子查询仍然需要它的WHERE子句。实际上,您需要明确地将子查询与表的(#usp_sec)行相关联。如果没有更多信息,例如您的表定义,我们无法告诉您应该如何做。