日期:2014-05-18  浏览次数:20693 次

触发器能实现这些功能吗?
当插入的时候,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_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 i
    where i.user_id = web_user.user_id
    and i.user_type = '1'
end


2:
create trigger t_insert_web_user 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

3:
create trigger t_update_web_user 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

------解决方案--------------------
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