ユーザーがフィールドの値を手動で更新できるデータベース内のテーブルを参照する SQL Server ストアド プロシージャがありますrent
( 'Rent1'
)。このプロシージャは、この賃貸料の値を別のテーブルの賃貸料フィールドと比較します ( 'Rent2'
)。If Rent1
is different from Rent2
the value for Rent2
Is updated to the value of Rent1
... または少なくともそれが起こるはずです。
このストアド プロシージャを実行すると、問題なく実行され、次の出力メッセージが表示されます。
(1 row(s) affected)
(1 row(s) affected)
Rent1
テストの手段として、2つの値を と の間で異なるように変更したため、これは私が期待する結果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
どこが間違っているのか、または出力メッセージが嘘をついている理由を教えてくれる人はいますか? それとも、私が取ることができる別のアプローチでしょうか?どんな形でも助けていただければ幸いです、ありがとう!
更新:別のアプローチを試してみましたが、結果は同じで、あと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