--表名: [dbo].[tee]
id int Unchecked
FName nvarchar(50) Unchecked
FSalary decimal(18, 0) Unchecked
--表名: [dbo].[TRecordTee]
id int Unchecked
RecordString nvarchar(100) Unchecked
触发器recordTee 的创建-- 创建一个触发器
create  trigger recordTee 
on dbo.tee
after update ,insert
as
begin
declare @Name nvarchar(50) ;
declare @Salary decimal(18,0)
select @Name=i.Fname,@Salary=i.FSalary from [inserted] as i; -- [inserted]是不能变的,表示主表。
--insert 
insert into dbo.TRecordTee (RecordString) values('Time:'+convert(nvarchar(20),getDate(),101)+'Name:'+convert(nvarchar(10),@Name)+' salary:'+convert(nvarchar(10),@Salary));
--select * from dbo.TRecordTee;
end--试试:
insert into  dbo.tee(FName,Fsalary)values('mmm',5000);
go
select *from dbo.tee;请问:   --现在 国家规定:
   --要求工资一定要 大于 1500元/月;
  如何 修改 触发器[recordTee] 使得插入,or 修改的表[dbo.tee]的工资 Fsalary<=1500时, 就不允许输入? 

解决方案 »

  1.   


    -- 创建一个触发器
    create  trigger recordTee 
        on dbo.tee
        after update ,insert
    as
    begin
        declare @Name nvarchar(50) ;
        declare @Salary decimal(18,0)
        select @Name=i.Fname,@Salary=i.FSalary from [inserted] as i; -- [inserted]是不能变的,表示主表。
        --insert 
        if @Salary>1500
        begin
        insert into dbo.TRecordTee (RecordString) values('Time:'+convert(nvarchar(20),getDate(),101)+'Name:'+convert(nvarchar(10),@Name)+' salary:'+convert(nvarchar(10),@Salary));
        --select * from dbo.TRecordTee;
        end
        
    end
      

  2.   

    我的意思是,
    --表名: [dbo].[tee] 是用来记录工资的,
    --表名: [dbo].[TRecordTee] 是用来记录操作员的操作的。意思是:
      当插入or 修改 来表  [dbo].[tee]  的数据时,如果 FSalary<=1500 就终止本次插入。
      不过  [dbo].[TRecordTee] 是用来记录操作员的操作的
      所以还是要向 表 [dbo].[TRecordTee] 写入数据。 
      

  3.   

    那用 INSTEAD OF  替换 AFTER
      

  4.   


    -- 创建一个触发器
    create  trigger recordTee 
        on dbo.tee
         INSTEAD OF update ,insert
    as
    begin
        declare @Name nvarchar(50) ;
        declare @Salary decimal(18,0)
        select @Name=i.Fname,@Salary=i.FSalary from [inserted] as i; -- [inserted]是不能变的,表示主表。
        --insert 
        if @Salary>1500
        begin
        insert into  dbo.tee(FName,Fsalary)values('mmm',5000);
        insert into dbo.TRecordTee (RecordString) values('Time:'+convert(nvarchar(20),getDate(),101)+'Name:'+convert(nvarchar(10),@Name)+' salary:'+convert(nvarchar(10),@Salary));
        --select * from dbo.TRecordTee;
        end
        
    end
      

  5.   


    create  trigger recordTee 
        on dbo.tee
        for update ,insert
    as
    begin
        declare @Name nvarchar(50) ;
        declare @Salary decimal(18,0)
        select @Name=i.Fname,@Salary=i.FSalary from [inserted] as i; -- [inserted]是不能变的,表示主表。
        if @salary>=1500
        begin
        insert into dbo.TRecordTee (RecordString) 
    values('Time:'+convert(nvarchar(20),getDate(),101)+'Name:'+convert(nvarchar(10),@Name)+' salary:'+convert(nvarchar(10),@Salary));
        end
      else 
    begin
    print '工资不能少于1500元'
    end
        --select * from dbo.TRecordTee;
    end
      

  6.   

    触发器比较费劲,用约束简单
    create table [dbo].[tee](
    id    int,
    FName    nvarchar(50),
    FSalary    decimal(18, 0))
    ALTER TABLE [dbo].[tee]
    ADD CONSTRAINT chk_tee CHECK (FSalary>1500)
    insert into [tee] select 1,'aaaa',1000------------------
    消息 547,级别 16,状态 0,第 1 行
    INSERT 语句与 CHECK 约束"chk_tee"冲突。该冲突发生于数据库"Test",表"dbo.tee", column 'FSalary'。
    语句已终止。