一个比较麻烦的触发器,请各位老师指点,谢谢!!

plutu 2008-04-05 03:02:43
我现在有一个表tab1,表中的一个字段名称为xuhao,字符型,我想在触发器中完成如下功能:
如果xuhao的值为“1-88”,我想把其值在输入后由“1-88”变成“081-0088”,变换规则是,在最前面加上当前的年份“08”,“-”后边字符长度如果小于4位,那么用“0”补上凑足4位,如上边的“-”后边有两位“88”则改成“0088”,请问这个触发器怎么写啊?

create table tab1(xuhao char(10))
insert into tab1(xuhao) values('1-88')
...全文
66 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangCK 2008-04-05
  • 打赏
  • 举报
回复
create  table  tab1(xuhao char(10)) 
go
create trigger tri_test
on tab1
instead of insert
as
declare @s varchar(10)
declare @left varchar(10),@right varchar(10)

select * into # from inserted

update #
set xuhao=right(datename(year,getdate()),2)+left(xuhao,charindex('-',xuhao)-1)+'-'
+right('0000'+rtrim(substring(xuhao,charindex('-',xuhao)+1,10)),4)

insert into tab1
select * from #
go

insert into tab1(xuhao) values('1-88')
insert into tab1(xuhao) values('2-008')
insert into tab1(xuhao) values('1-8')

select * from tab1
go
liangCK 2008-04-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 plutu 的回复:]
不用insert方式,因为还有好多的字段,能不能改成update方式?
[/Quote]

也可..一样的.
plutu 2008-04-05
  • 打赏
  • 举报
回复
不用insert方式,因为还有好多的字段,能不能改成update方式?
plutu 2008-04-05
  • 打赏
  • 举报
回复
真快!谢谢!
liangCK 2008-04-05
  • 打赏
  • 举报
回复
1楼有手误..看2楼的.
liangCK 2008-04-05
  • 打赏
  • 举报
回复
create  table  tab1(xuhao char(10)) 
go
create trigger tri_test
on tab1
instead of insert
as
declare @s varchar(10)
declare @left varchar(10),@right varchar(10)
if @@rowcount>1 return

select @s=xuhao from inserted i

set @left=left(@s,charindex('-',@s)-1)
set @right=rtrim(substring(@s,charindex('-',@s)+1,10))

set @left=right(datename(year,getdate()),2)+@left
set @right=right('0000'+@right,4)
set @s=@left+'-'+@right

insert into tab1(xuhao) values(@s)
go

insert into tab1(xuhao) values('1-88')
insert into tab1(xuhao) values('2-008')
insert into tab1(xuhao) values('1-8')

select * from tab1
go

drop table tab1

/*
xuhao
----------
081-0088
082-0008
081-0008
*/
liangCK 2008-04-05
  • 打赏
  • 举报
回复
create trigger tri_test
on tab1
instead of insert
as
declare @s varchar(10)
declare @left varchar(10),@right varchar(10)
if @@rowcount>0 return

select @s=xuhao from inserted i

set @left=left(@s,charindex('-',@s)-1)
set @right=substring(@s,charindex('-',@s)+1,10)

set @left=datename(year,getdate())+@left
set right=right('0000'+@right,4)

set @s=@left+'-'+@right

insert into tab1(xuhao) values(@s)
go

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧