有户型HUXING表,关键字段有ID,均价PRICE,面积square,总价totalprice
要求每更新一次就重新计算一次总价=面积*均价,我写的只更新一条时没错,但更新多条时只执行最后一条,如题,怎么实现行级触发器效果,即更新多条时触发器也执行多次
没听说过SQL SERVER的Trigger是只更新最后一条的,不知道你是否误安装了SQL SERVER 1990 BETA版。
要不然麻烦自己搞一下简单的测试。
为了证明这点,我居然闲的发慌真了弄了个数据表进行了简单的测试。
我居然连这种最起码的信任都没有给到微软,请原谅我吧,BILL。
数据表名test_table31, 数据表内有三行数据,第一列是GUID,PrimaryKey,你别管他叫啥字段名了。
7650d1ed-9779-472e-8b9d-005ac317ac81 | name1 | 1 |
a20a0d30-fdb0-4ab4-8b5a-5ca785b43de2 | name2 | 2 |
8770a802-e044-433e-b3e6-a478ae29df09 | name3 | 3 |
Trigger是这样的
Update test_Table1 set Value=Inserted.Value+1 from Inserted where test_table1.TestID=Inserted.TestID
这是我的查询语句
Update test_table1 set name=name + '_update'
下面是执行结果
(3 行受影响)
(3 行受影响) -----这是Trigger在执行的结果。
这是结果的数据行
7650d1ed-9779-472e-8b9d-005ac317ac81 | name1_update | 2 |
a20a0d30-fdb0-4ab4-8b5a-5ca785b43de2 | name2_update | 3 |
8770a802-e044-433e-b3e6-a478ae29df09 | name3_update | 4 |
注:最后一列的值原来是1、2、3
declare @ID int declare @HuXingSquare float declare @HuXingHouseId nvarchar(255) declare @HuXingPrice nvarchar(255) declare @HuXingShouFuBiLi float select @ID=ID,@HuXingSquare=HuXingSquare,@HuXingHouseId=HuXingHouseId,@HuXingPrice=HuXingPrice,@HuXingShouFuBiLi=HuXingShouFuBiLi from inserted if(@HuXingPrice!=0) update PE_U_HuXingPhoto set PE_U_HuXingPhoto.HuXingShouFu=@HuXingSquare*@HuXingPrice*@HuXingShouFuBiLi where PE_U_HuXingPhoto.ID=@ID else update PE_U_HuXingPhoto set PE_U_HuXingPhoto.HuXingShouFu=@HuXingSquare*@HuXingShouFuBiLi*PE_U_House.HousePrice from PE_U_HuXingPhoto,PE_U_House where PE_U_House.ID=@HuXingHouseId and PE_U_HuXingPhoto.ID=@ID
业务逻辑就是,楼盘下有多个户型,若户型有价格则用户型价格,若无则用楼盘均价计算总价,这个单次修改时没问题,一次修改多条就不行了,问题出在哪儿,求教大虾
@吃俺老孙一棒:
晕倒,你这个@ID只能保存一个值,骚年你不知道这事吗?
你要记住一点,就是这个Trigger只执行一次,不管你Update几条数据,而不是
修改一条数据执行一次。
所以Inserted这是一个表,而不是一行数据。
这样理解,你再去修改你的SQL语句就可以了。
@爱编程的大叔: 了了,就是把inserted表与我的PE_U_HuXingPhoto表联查,把ID当做公共字段,3Q