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

触发器,语句执行,应用界面却不执行
我在表格中写这样的触发器:
当提前期更改时,将该项目号更改前更改后的提前期都检查出来

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语句时,可以将数据提取出来,但是当我在应用程序 界面更新的时候,却没有数据选择出来,请问是怎么回事?
谢谢

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


如果正确,记得给分阿

------解决方案--------------------
我建议你把想要的数据送到一个表里,应用程序从这个表里取值。
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表里取出想要的值

单机用户这样做应该没问题,但是多用户的话,就需要重新考虑如何实现了


------解决方案--------------------
SQL code

use pubs
go

create table log_jobs
(job_id int, newval int,oldval int,date1 datetime)

go

create 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=2

select * 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 行)
*/

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