我在表格中写这样的触发器:
当提前期更改时,将该项目号更改前更改后的提前期都检查出来CREATE TRIGGER [CheckItem] ON [proddta].[F4102] 
FOR INSERT, UPDATE
AS
begin
 if update(ibltlv)
 select  i.ibitm,i.iblitm,i.ibltlv as 更改前提前期,d.ibltlv as 更改后提前期 from deleted d,inserted i
end
当我执行update语句时,可以将数据提取出来,但是当我在应用程序 界面更新的时候,却没有数据选择出来,请问是怎么回事?
谢谢

解决方案 »

  1.   

    这个的作用是查询,然后输出到控制台
    你在应用程序update,就找不到结果了
    你可以把刚才的那条语句做一个修改:
    如果update,将select的结果插入到一个表中,然后你用的时候,从这个表中搜索。用完以后,再将这个表的数据清空。以备下次使用。
    如果正确,记得给分阿
      

  2.   

    我建议你把想要的数据送到一个表里,应用程序从这个表里取值。
    TableName是一个表的名字
    字段定义对应于i.ibitm,i.iblitm,i.ibltlv ,d.ibltlv   也就是共4个字段
    insert into TableName select     i.ibitm,i.iblitm,i.ibltlv   as   更改前提前期,d.ibltlv   as   更改后提前期   from   deleted   d,inserted   i 你在应用程序界面更新后,再从TableName表里取出想要的值单机用户这样做应该没问题,但是多用户的话,就需要重新考虑如何实现了
      

  3.   

    鶴嘯九天:那为什么使用update语句就可以返回记录集?
    另外,这个触发器是多用户的,应该怎么设计?
    要是嫌分少,可以再加
      

  4.   

    --刚在查询分析器中试了下,还真的可以返回记录集
    use pubs
    go
    create trigger kkkk  on jobs
    for update 
    as
    begin
    select top 3 * from employee
    end
    update jobs 
    set min_lvl=100
    where job_id=1
    /*
    emp_id    fname                minit lname                          job_id job_lvl pub_id hire_date                                              
    --------- -------------------- ----- ------------------------------ ------ ------- ------ ------------------------------------------------------ 
    PMA42628M Paolo                M     Accorti                        13     35      0877   1992-08-27 00:00:00.000
    PSA89086M Pedro                S     Afonso                         14     89      1389   1990-12-24 00:00:00.000
    VPA30890F Victoria             P     Ashworth                       6      140     0877   1990-09-13 00:00:00.000(所影响的行数为 3 行)*/
      

  5.   

    触发器返的结果集也是临时数据,你在程序界面肯定看不到这些数据的,
    因为你的程序和数据库是通过odbc/ado 连接的,odbc/ado 连接的是具体的数据库对象
      

  6.   


    use pubs
    gocreate table log_jobs
    (job_id int, newval int,oldval int,date1 datetime)gocreate trigger kkkk  on jobs
    for update 
    as
    begin
       declare @value int
       select @value=(select count(*) from log_jobs where job_id in (select job_id from deleted))
          if @value=0 
             begin
       insert into log_jobs
               select a.job_id,a.min_lvl,b.min_lvl,getdate()
               from deleted a join inserted b
               on a.job_id=b.job_id
             end
          else
             begin
               update log_jobs
               set newval=b.min_lvl,oldval=a.min_lvl,date1=getdate()
               from deleted a  join inserted b
               on a.job_id=b.job_id
               where log_jobs.job_id=a.job_id
             end   
     
    end
    update jobs 
    set min_lvl=180
    where job_id=2select * from log_jobs/*
    job_id      newval      oldval      date1                                                  
    ----------- ----------- ----------- ------------------------------------------------------ 
    1           200         100         2007-11-15 17:10:30.153
    2           180         200         2007-11-15 17:11:37.153(所影响的行数为 2 行)
    */
      

  7.   

    对于楼主这种需求,其实很简单
    只要建一个log 表,专门记录一个表的修改前的值和修改后的值,
    然后在程序中调用这个记录表
      

  8.   

    对于多用户的情况,你可以这样实现
    当有用户使用这个公共表时你可以先创建一个事物,然后用TABLOCKX把这个表锁定
    在这个用户使用完后再用commit来结束事物
    这样就OK了
      

  9.   

    其实我是想,当用于更改了某一个提前期,将它更改前更改后的值都去出来,然后配置sql mail,使用邮件直接发给相关人,现在还要在数据库中新建表,因为我们是二次开发,自己新建的表格在升级的时候都没了,有没有更好的方法?
      

  10.   

    其实我是想,当用于更改了某一个提前期,将它更改前更改后的值都去出来,然后配置sql mail,使用邮件直接发给相关人,现在还要在数据库中新建表,因为我们是二次开发,自己新建的表格在升级的时候都没了,有没有更好的方法?