触发器,语句执行,应用界面却不执行,该如何处理
触发器,语句执行,应用界面却不执行
我在表格中写这样的触发器:
当提前期更改时,将该项目号更改前更改后的提前期都检查出来
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表里取出想要的值
单机用户这样做应该没问题,但是多用户的话,就需要重新考虑如何实现了
------解决方案--------------------
我在表格中写这样的触发器:
当提前期更改时,将该项目号更改前更改后的提前期都检查出来
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了