日期:2014-05-17  浏览次数:20416 次

高手帮忙看下这个触发器怎么写
一个表中三个字段:
d_xiaoshi (numeric类型),和d_fenzhong(numeric类型)和d_qiandao(varchr类型)
如果d_xiaoshi 输入01;d_fenzhong输入02
d_qiandao怎样显示为01:02
create trigger ht_tg_db_dengji

on db_dengji

for insert

as

update db_dengji set d_qiandao=a.d_xiaoshi+a.d_fenzhong from inserted a 这个已经试验过了是把数字相加了,而且每新增一条记录历史记录显示的新增记录的和,所以这个不成功。我想要的是并列显示,
------解决方案--------------------
create table tb(d_xiaoshi numeric(18,0),d_fenzhong numeric(18,0),d_qiandao varchar(10))
go
create trigger tb_qiandao
on tb 
INSTEAD OF insert
as  
begin
insert into tb select d_xiaoshi,d_fenzhong,right('0'+convert(varchar,convert(int,d_xiaoshi)),2)+':'+right('0'+convert(varchar,convert(int,d_fenzhong)),2) from inserted
end
go
insert into tb(d_xiaoshi,d_fenzhong)select 1,2
go
select * from tb
/*
d_xiaoshi                               d_fenzhong                              d_qiandao
--------------------------------------- --------------------------------------- ----------
1                                       2                                       01:02

(1 行受影响)

*/
go
drop table tb

------解决方案--------------------
语句是执行是没错误,可是我系统中执行完毕d_qiandao字段显示是空的,什么都没有
------解决方案--------------------
方便说下qq吗,我qq419128889
------解决方案--------------------
我的表已经建好了,表名是db_dengji,问题中的提问的只是其中三个字段,表中还涉及其他字段,按照【qianjin036a】说的我建立了一下触发器,分析是正常的,执行的话就会出现错误
------解决方案--------------------

--方法1 触发器
create table fan1
(d_xiaoshi numeric,
 d_fenzhong numeric,
 d_qiandao varchar(100))

create trigger tr_fan1
on fan1 instead of insert
as
begin
 insert into fan1
 select d_xiaoshi,d_fenzhong,
        case len(d_xiaoshi) when 1 then '0'+rtrim(cast(d_xiaoshi as int))
        else rtrim(cast(d_xiaoshi as int)) end + ':' +
        case len(d_fenzhong) when 1 then '0'+rtrim(cast(d_fenzhong as int))
        else rtrim(cast(d_fenzhong as int)) end
  from inserted
end

insert into fan1(d_xiaoshi,d_fenzhong) values(1,2)

select * from fan1

/*
d_xiaoshi       d_fenzhong        d_qiandao