我有一个SQL Server存储过程,在我的数据库引用表,用户可以手动更新为rent
场('Rent1'
)值。该过程将此租赁价值与另一个表中的租赁字段('Rent2'
)进行比较。如果Rent1
与Rent2
不同,则Rent2
的值更新为Rent1
的值......或者至少这是应该发生的情况。更新存储过程不更新
当我执行该存储过程,它运行良好,我收到这些输出消息:
(1 row(s) affected)
(1 row(s) affected)
哪个是结果,我期望,因为测试的手段,我已经改变了两个值在Rent1
和Rent2
之间不同。但是当我查询我的更新表时,值保持不变。
这里是我的存储过程:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER PROCEDURE update_rent
AS
DECLARE @flag INT
SET @flag = (select COUNT(*) from unit_rent left outer join unittype on unittype = scode where rent <> srent)
WHILE (@flag > 0)
BEGIN
IF (select min(rent) from unit_rent
left outer join unittype on unittype = scode
left outer join property on property.scode = unit_rent.pscode
where rent <> srent) <>
(select min(srent) from unit_rent
left outer join unittype on unittype = scode
left outer join property on property.scode = unit_rent.pscode
where rent <> srent
and rent in (select min(rent) from unit_rent
left outer join unittype on unittype = scode
left outer join property on property.scode = unit_rent.pscode
where rent <> srent))
BEGIN
UPDATE unittype
SET srent = (select min(rent) from unit_rent
left outer join unittype on unittype = scode
left outer join property on property.scode = unit_rent.pscode
where rent <> srent)
WHERE unittype.hmy = (select min(hmy) from unittype left outer join unit_rent on unittype = scode where rent <> srent
and rent = (select min(rent) from unit_rent left outer join unittype on unittype = scode where rent <> srent))
SET @flag = @flag-1;
END
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
任何人都可以看到我可能会错误或者告诉我为什么我的输出信息骗我?或者,也许我可以采取不同的方法?我会很感激任何形式的帮助,谢谢!
UPDATE:只是尝试了不同的方法,同样的结果,只是3个(1 row(s) addected)
消息:
ALTER PROCEDURE update_rent
AS
DECLARE @tmprent TABLE (hmy INT, rent decimal(11,2));
DECLARE @flag INT
SET @flag = (select COUNT(*) from unit_rent left outer join unittype on unittype = scode where rent <> srent)
INSERT INTO @tmprent (hmy, rent) values (1, 0.00);
WHILE (@flag > 0)
BEGIN
IF (select min(rent) from unit_rent
left outer join unittype on unittype = scode
left outer join property on property.scode = unit_rent.pscode
where rent <> srent) <>
(select min(srent) from unit_rent
left outer join unittype on unittype = scode
left outer join property on property.scode = unit_rent.pscode
where rent <> srent
and rent in (select min(rent) from unit_rent
left outer join unittype on unittype = scode
left outer join property on property.scode = unit_rent.pscode
where rent <> srent))
BEGIN
UPDATE @tmprent
SET rent = (select min(rent) from unit_rent
left outer join unittype on unittype = scode
left outer join property on property.scode = unit_rent.pscode
where rent <> srent)
WHERE hmy = 1
UPDATE unittype
SET srent = (select rent from @tmprent where hmy = 1)
WHERE unittype.hmy = (select min(hmy) from unittype left outer join unit_rent on unittype = scode where rent <> srent
and rent = (select min(rent) from unit_rent left outer join unittype on unittype = scode where rent <> srent))
SET @flag = @flag-1;
END
END
如果您在连接表时总是使用别名,这将有所帮助。从这里我们不知道哪些列来自哪个表。 – HABO 2013-04-24 17:22:25
但是,我可以认为,除非您处理空值,否则包含空值的字段可能无法正常工作。 – HLGEM 2013-04-24 17:57:07