首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

触发器能实现这些功能吗?该怎么处理

2012-03-21 
触发器能实现这些功能吗?当插入的时候,user_type为1时,user_money字段自动用原有的值加上100。当删除的时候

触发器能实现这些功能吗?
当插入的时候,user_type为1时,user_money字段自动用原有的值加上100。
当删除的时候,将删除记录备份到web_user_backup。
当更新的时候,如果user_money大于50000。user_money字段等于50000 + 50000 / 100。

SQL code
CREATE TABLE [dbo].[web_user](    [user_id] [bigint] IDENTITY(1,1) NOT NULL,    [user_mail] [nvarchar](50) NULL,    [user_name] [nvarchar](50) NULL,    [user_type] [int] NULL,    [user_money] [decimal](20, 2) NULL) ON [PRIMARY]CREATE TABLE [dbo].[web_user_backup](    [user_id] [bigint] IDENTITY(1,1) NOT NULL,    [user_mail] [nvarchar](50) NULL,    [user_name] [nvarchar](50) NULL,    [user_type] [int] NULL,    [user_money] [decimal](20, 2) NULL) ON [PRIMARY]


[解决办法]
SQL code
当然可以1:create trigger t_insert_web_user on web_userfor insert asif exists(select 1 from inserted where user_type = '1')begin    update web_user    set user_money = isnull(user_money,0) + 100    from inserted i    where i.user_id = web_user.user_id    and i.user_type = '1'end2:create trigger t_insert_web_user on web_userfor delete asinsert into web_user_backup(user_id,user_mail,user_name,user_type,user_money)select user_id,user_mail,user_name,user_type,user_moneyfrom deleted3:create trigger t_update_web_user on web_userfor updateasif update(user_money) and exists(select 1 from inserted ,deleted    where inserted.user_money > 50000    and inserted.user_id = deleted.user_id    and inserted.user_money <> deleted.user_money)begin    update web_user    set user_money = 50000 + 50000 / 100    from inserted ,deleted     where inserted.user_id = web_user.user_id    and insertedi.user_id = deleted.user_id    and inserted.user_money <> deleted.user_money    and insertedi.user_money  > 50000end
[解决办法]
CREATE TABLE [dbo].[web_user](
[user_id] [bigint] IDENTITY(1,1) NOT NULL,
[user_mail] [nvarchar](50) NULL,
[user_name] [nvarchar](50) NULL,
[user_type] [int] NULL,
[user_money] [decimal](20, 2) NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[web_user_backup](
[user_id] [bigint] IDENTITY(1,1) NOT NULL,
[user_mail] [nvarchar](50) NULL,
[user_name] [nvarchar](50) NULL,
[user_type] [int] NULL,
[user_money] [decimal](20, 2) NULL
) ON [PRIMARY]

具体实现:
当插入的时候,user_type为1时,user_money字段自动用原有的值加上100:
create trigger tri_insert1 on web_user
for insert 
as
if exists(select 1 from inserted where user_type = '1')
begin
update web_user
set user_money = isnull(user_money,0) + 100
from inserted 
where inserted .user_id = web_user.user_id
and inserted .user_type = '1'
end

当删除的时候,将删除记录备份到web_user_backup:
create trigger tri_insert2 on web_user
for delete 
as
insert into web_user_backup(user_id,user_mail,user_name,user_type,user_money)
select user_id,user_mail,user_name,user_type,user_money from deleted

当更新的时候,如果user_money大于50000。user_money字段等于50000 + 50000 / 100:
create trigger tri_update on web_user
for update
as
if update(user_money) and exists(select 1 from inserted ,deleted
where inserted.user_money > 50000
and inserted.user_id = deleted.user_id
and inserted.user_money <> deleted.user_money)
begin
update web_user
set user_money = 50000 + 50000 / 100
from inserted ,deleted 
where inserted.user_id = web_user.user_id
and insertedi.user_id = deleted.user_id
and inserted.user_money <> deleted.user_money
and insertedi.user_money > 50000
end

热点排行