读书人

高手帮忙看上这个触发器如何写

发布时间: 2012-12-14 10:33:08 作者: rapoo

高手帮忙看下这个触发器怎么写
一个表中三个字段:
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


-------------- ---------------- ----------------
1 2 01:02

(1 row(s) affected)
*/


--方法2 计算列
create table fan2
(d_xiaoshi numeric,
d_fenzhong numeric,
d_qiandao as 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)

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

select * from fan2

/*
d_xiaoshi d_fenzhong d_qiandao
----------------- ------------------- ---------------------------
1 2 01:02

(1 row(s) affected)
*/


[解决办法]
执行的时候报什么错错误呀!

读书人网 >SQL Server

热点推荐