求一个触发器(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