正如我的问题标题所说,我的程序循环但我更新的所有值都被覆盖了。这是下面发布的代码。假设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
)
答案 0 :(得分:3)
您的UPDATE
语句需要自己的WHERE
子句。否则,每个UPDATE
将更新表中的每一行。
你编写的方式,你的子查询仍然需要它的WHERE
子句。实际上,您需要明确地将子查询与表的(#usp_sec)行相关联。如果没有更多信息,例如您的表定义,我们无法告诉您应该如何做。