我在表格中写这样的触发器:
当提前期更改时,将该项目号更改前更改后的提前期都检查出来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语句时,可以将数据提取出来,但是当我在应用程序 界面更新的时候,却没有数据选择出来,请问是怎么回事?
谢谢
当提前期更改时,将该项目号更改前更改后的提前期都检查出来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语句时,可以将数据提取出来,但是当我在应用程序 界面更新的时候,却没有数据选择出来,请问是怎么回事?
谢谢
解决方案 »
- 我才开始学习 MS SQL ,晚吗?
- 向大峡们求一sql语句,急在线等!!!
- 我要想把一个表的所有数据插入到另外一个表的末尾怎么做,其中这两个表的结构是完全一样的(都包含一个自动增长的字段id,其他的字段都一
- 一个简单的SQL语句,但我就是想不出来,帮帮忙吧
- 关于textcopy在sql server2005中的使用
- 如何用数据库的问题!
- 我想对数据库中的数据进行全文检索,可以用Index Server吗?
- 大虾帮我看看,这个为什么错啊?????
- 存贮过程的资料
- (急)SQL2000 按月统计期初、期末数据
- 请问一下,如何在建表的时候用命令建立外键?谢谢大家了
- 分享:T-sql 本地--分布式查询 代码
你在应用程序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表里取出想要的值单机用户这样做应该没问题,但是多用户的话,就需要重新考虑如何实现了
另外,这个触发器是多用户的,应该怎么设计?
要是嫌分少,可以再加
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 行)*/
因为你的程序和数据库是通过odbc/ado 连接的,odbc/ado 连接的是具体的数据库对象
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 行)
*/
只要建一个log 表,专门记录一个表的修改前的值和修改后的值,
然后在程序中调用这个记录表
当有用户使用这个公共表时你可以先创建一个事物,然后用TABLOCKX把这个表锁定
在这个用户使用完后再用commit来结束事物
这样就OK了