日期:2014-05-19  浏览次数:20581 次

求一个触发器(sqlserver),在线等
TEST表
FileNo   字符串       此字段数据格式       类别(四位年份)流水号号   如   "测试(2007)1号 "
Str         字符串
Nyear     数值
tempno   数值
触发器监控   fileno值的增删改;将值拆分至三个其他的字段
如   插入     "测试(2007)1号 "   到   fileno   ;触发器将三个字段填值如下
FileNo   测试(2007)1号
Str         测试
Nyear     2007
tempno   1

------解决方案--------------------
Create trigger trig_name On TEST
After insert
as
update TEST set
FileNo=substring(t.FileNo,1,2),
Str=substring(t.Str,4,4),
tempno=substring(t.tempno,9,1)
From inserted
go


------解决方案--------------------
/*--字符串分函数

分拆指定分隔符的的字符串,返回指定位置的字符

--邹建 2004.04(引用请保留此信息)--*/

CREATE FUNCTION dbo.f_splitSTR(
@s varchar(8000), --要分拆的字符串
@split varchar(10), --数据分隔符
@pos int -- 取第几个
)RETURNS varchar(100)
AS
BEGIN
DECLARE @splitlen int, @re varchar(100)
SET @splitlen=LEN(@split+ 'a ') - 2
WHILE CHARINDEX(@split,@s) > 0 AND @pos > 0
SELECT
@re = LEFT(@s,CHARINDEX(@split,@s)-1),
@s=STUFF(@s,1,CHARINDEX(@split, @s)+@splitlen, ' '),
@pos = @pos - 1
RETURN(CASE
WHEN @pos = 0 THEN @re
WHEN @pos = 1 THEN @s
ELSE NULL END)
END
GO


create table test(FileNo varchar(20),str varchar(10),Nyear varchar(10),tempno int)

insert test
select 'test(2007)1hao ',
dbo.f_splitSTR( 'test(2007)1hao ', '( ',1),
dbo.f_splitSTR(dbo.f_splitSTR( 'test(2007)1hao ', '( ',2), ') ',1),
replace(dbo.f_splitSTR( 'test(2007)1hao ', ') ',2), 'hao ', ' ')


--- 只用了个函数就能完成,不知道是不是你要的
------解决方案--------------------
Create trigger trig_name On TEST
for insert
as
if @@rowcount> 0
begin
update TEST set FileNo=substring(t.FileNo,1,2),
Str=substring(t.Str,4,4),
tempno=substring(t.tempno,9,1)
From inserted
end
go

Create trigger trig_name On TEST
for insert
as
if @@rowcount> 0
begin
update TEST set FileNo=substring(t.FileNo,1,2),
Str=substring(t.Str,4,4),
tempno=substring(t.tempno,9,1)
From inserted
end
go


Create trigger trig_insert On TEST
for insert
as
if @@rowcount> 0
begin
update TEST set FileNo=substring(t.FileNo,1,2),
Str=substring(t.Str,4,4),
tempno=substring(t.tempno,9,1)
From inserted
end
go

Create trigger trig_update On TEST
for update
as
if update(FileNo)
begin
update TEST set FileNo=substring(t.FileNo,1,2),
Str=substring(t.Str,4,4),
tempno=substring(t.tempno,9,1)
From inserted
end
go



------解决方案--------------------
楼主看你了你的题,建议你用事务塞,
你的目的是插入一条数据,再对这条数据进行一个更新的操作
------解决方案--------------------
create table TEST(FileNo varchar(20), [Str] varchar(20), Nyear int, tempno int)
go
create trigger tr_Insert on TEST
for insert
as
begin
declare @FileNo varchar(20), @Str varchar(20), @Nyear int, @tempno int