sql server trigger小需求

自定义slipt函数:

 

/****** Object:  UserDefinedFunction [dbo].[f_split]    Script Date: 05/11/2012 10:01:16 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[f_split]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[f_split]
GO

USE [mytest]
GO

/****** Object:  UserDefinedFunction [dbo].[f_split]    Script Date: 05/11/2012 10:01:16 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

create function [dbo].[f_split](@aString varchar(8000),@pattern varchar(10))
returns @temp table(a varchar(100))
--实现split功能 的函数
--说明:@aString,字符串,如a:b:c;@pattern,分隔标志,如 :
as 
begin
    declare @i int
    set @aString=rtrim(ltrim(@aString))
    set @i=charindex(@pattern,@aString)
    while @i>=1
    begin
        insert @temp values(left(@aString,@i-1))
        set @aString=substring(@aString,@i+1,len(@aString)-@i)
        set @i=charindex(@pattern,@aString)
    end
    if @aString<>'' 
       insert @temp values(@aString)
    return

end
GO
-----------------------------------------------------------------------------------------------------

创建处理的trigger

 

--创建insert插入类型触发器
if (object_id('tgr_table_insert', 'tr') is not null)
    drop trigger tgr_table_insert
go
create trigger tgr_table_insert
on [bpo].[tableA] AFTER INSERT --插入触发
as
begin
    --定义变量
    declare @id varchar(50), @name varchar(4000),@sliptname varchar(50)
   
    --在inserted表中查询已经插入记录信息
    select @id = id, @name = name from inserted
    if(@id is not null and @name is not null)
    begin
        declare mycursor cursor for select * from dbo.f_split(@name ,';') -- 以;截取字段,保存在游标里
        open mycursor -- 打开游标
        fetch next from mycursor into @sliptname
        while(@@fetch_status=0) -- 判断游标状态,0为fetch语句成功,1为fetch语句失败,2为被提取的行不存在
           begin             
              insert into [bpo].[tableB] values(@id, @sliptname) -- 向tableB表插入取的记录信息
              fetch next from mycursor into @sliptname    -- 游标取的下一条记录             
             
           end;
         close mycursor; -- 关闭游标
         DEALLOCATE mycursor;

    end;
     
    --print '添加tableB信息成功!';
end
GO

你可能感兴趣的:(sql server trigger小需求)