当前位置: 代码迷 >> Sql Server >> 触发器,语句执行,应用界面却不执行,该如何处理
  详细解决方案

触发器,语句执行,应用界面却不执行,该如何处理

热度:213   发布时间:2016-04-27 19:23:37.0
触发器,语句执行,应用界面却不执行
我在表格中写这样的触发器:
当提前期更改时,将该项目号更改前更改后的提前期都检查出来

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 pubsgocreate table log_jobs(job_id int, newval int,oldval int,date1 datetime)gocreate trigger kkkk  on jobsfor update asbegin   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    endupdate jobs set min_lvl=180where job_id=2select * from log_jobs/*job_id      newval      oldval      date1                                                  ----------- ----------- ----------- ------------------------------------------------------ 1           200         100         2007-11-15 17:10:30.1532           180         200         2007-11-15 17:11:37.153(所影响的行数为 2 行)*/
------解决方案--------------------
对于多用户的情况,你可以这样实现
当有用户使用这个公共表时你可以先创建一个事物,然后用TABLOCKX把这个表锁定
在这个用户使用完后再用commit来结束事物
这样就OK了
  相关解决方案