首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

大家帮小弟我看一上 这个触发器 为什么不执行

2012-12-17 
大家帮我看一下 这个触发器 为什么不执行一个日志文件导入到数据库中 称为A1表其基本格式是这样的然后 我

大家帮我看一下 这个触发器 为什么不执行
一个日志文件导入到数据库中 称为A1表  其基本格式是这样的

然后 我用subString把每条数据中有用的字段组合起来  插入到新建的这几张表
 就是这么一个触发器 但是不执行  。。还有一个就是为什么只有一行数据
下面就是这几张表 和触发器具体信息
--创建UserBase表
--drop table UserBase;
CREATE TABLE UserBase(
[id] [int] IDENTITY(1,1) NOT NULL,
[userid] [nvarchar](32) ,--用户Id
[stamp] [nvarchar](32),--邮戳
[identify] [nvarchar](4),--标识(page,base,cost,play)
[stbid][nvarchar](24),--机顶盒编号
[usertoken][nvarchar](32),--用户身份标识
[createtime] [datetime]   DEFAULT (getdate()),--创建时间
[other] [nvarchar](50)  DEFAULT (''),
 CONSTRAINT [PK_UserBase] PRIMARY KEY (userid),

--创建UserLog表
--drop table UserLog
CREATE TABLE UserLog(
[id] [int] IDENTITY(1,1) NOT NULL,
[userid] [nvarchar](32) ,--用户Id
[pageurl] [nvarchar](50),--页面url
[identify] [nvarchar](4),--标识(page,base,cost,play)
[stamp] [nvarchar](32),--邮戳
[createtime] [datetime] DEFAULT (getdate()),--创建时间
[other] [nvarchar](50)  DEFAULT (''),
 CONSTRAINT [PK_userlog] PRIMARY KEY (userid),



--创建UserPlaySongData表
--drop table UserPlaySongData
CREATE TABLE [UserPlaySongData](
[id] [int] IDENTITY(1,1) NOT NULL,--自增量
[userid] [nvarchar](32)  ,--用户Id
[stamp] [nvarchar](32) ,--邮戳
    [identify] [nvarchar](4),--标识(page,base,play,cost)
[sourcefilename] [nvarchar](32),--视频原始文件名
[createtime]  datetime ,--创建时间
[other] [nvarchar](50) ,
 CONSTRAINT [PK_userplaysongdata] PRIMARY KEY (userid,sourcefilename), 

--创建UserCharge
--drop table UserCharge
CREATE TABLE [UserCharge](
[id] [int] IDENTITY(1,1) NOT NULL,--自增量
[userid] [nvarchar](32),--用户id
[identify] [nvarchar](4),--标识(page,base,play,cost)
    [stamp] [nvarchar](32) ,--邮戳
[fee] [nvarchar](32)DEFAULT (''),--计费代码
[description][nvarchar](50) default(''),--描述
[createtime] [datetime]  DEFAULT (getdate()),--创建时间
    [other] [nvarchar](50),
 CONSTRAINT [PK_UserCharge] PRIMARY KEY (userid,fee), 



--创建触发器

create  trigger tr_userLog_insert
on A1 FOR INSERT
as
   begin   
   declare
           @v_userid int,--用户Id
           @v_stamp int,--邮戳
           @v_identify nvarchar(4),--标识(page,base,play,cost)
           @v_pageurl nvarchar(50),--页面url
           @v_usertoken nvarchar(32),--用户标识
           @v_createtime datetime,--创建时间
           @v_sourcefilename nvarchar(32),--视频原文件
           @v_stbid nvarchar(24),--机顶盒id
           @v_fee nvarchar(32),--计费代码
           @v_description nvarchar(50);


    delete from A1  where dic like 'WARN%';--去除错误的信息 
    select @v_createtime = convert(datetime,subString(dic,7,19),120),--createtime
           @v_userid =  subString(dic,40,9),--userid
           @v_identify = subString(dic,82,4),--identify
           @v_pageurl = subString(dic,88,21),--pageurl
           @v_usertoken = subString(dic,167,32),--usertoken
           @v_sourcefilename = subString(dic,88,9),--sourcefilename
           @v_stamp = SubString(dic,73,7),--stamp
           @v_stbid = subString(dic,132,24),--stbid
           @v_fee = subString(dic,88,10), --fee
           @v_description  =  SubString(dic,109,50) from A1

--select @v_createtime,@v_userid,@v_identify,@v_pageurl,@v_usertoken,@v_sourcefilename,@v_stamp,@v_stbid,@v_fee,@v_description--这里查询为什么只有一条数据,应该有很多的啊

    if exists(select *from A1 where  dic like '%auth_info%')  --用户基本表
begin
insert into UserBase(userid,stamp,identify,stbid,usertoken,createtime,other)values(@v_userid,@v_stamp,@v_identify,@v_stbid,@v_usertoken,@v_createtime,'');
end
         if exists(select *from A1 where  subString(dic,82,4)='play' )--播放表
           begin        
insert into UserPlaySongData(userid,stamp,identify,sourcefilename,createtime,other)values(@v_userid,@v_stamp,@v_identify,@v_sourcefilename,@v_createtime,'');
           end    
       if exists(select *from A1 ) --用户日志表
           begin           
insert into UserLog(userid,pageurl,identify,stamp,createtime,other)values(@v_userid,@v_pageurl,@v_identify,@v_stamp,@v_createtime,'');
           end
      if exists(select *from A1 where dic like '%cost%')--计费表
           begin
                   insert into UserCharge(userid,identify,stamp,fee,description,createtime,other)values(@v_userid,@v_identify,@v_stamp,@v_fee,@v_description,@v_createtime,'');
           end

end
[解决办法]
天长了,看看你的if判断是否正确。
[解决办法]
我重新把触发器改了一下  为什么还是不行呢?
--创建触发器
create  trigger tr_userLog_insert
on A1 FOR INSERT
as
   begin   
   declare
           @v_userid int,--用户Id


           @v_stamp int,--邮戳
           @v_identify nvarchar(4),--标识(page,base,play,cost)
           @v_pageurl nvarchar(50),--页面url
           @v_usertoken nvarchar(32),--用户标识
           @v_createtime datetime,--创建时间
           @v_sourcefilename nvarchar(32),--视频原文件
           @v_stbid nvarchar(24),--机顶盒id
           @v_fee nvarchar(32),--计费代码
           @v_description nvarchar(50);
--删除WARN语句
   if exists(select *from inserted  where dic like'WARN%')
begin
 delete from inserted  where dic like 'WARN%';
end
--声明
    select @v_createtime = convert(datetime,subString(dic,7,19),120),--createtime
           @v_userid =  subString(dic,40,9),--userid
           @v_identify = subString(dic,82,4),--identify
           @v_pageurl = subString(dic,88,21),--pageurl
           @v_usertoken = subString(dic,167,32),--usertoken
           @v_sourcefilename = subString(dic,88,9),--sourcefilename
           @v_stamp = SubString(dic,73,7),--stamp
           @v_stbid = subString(dic,132,24),--stbid
           @v_fee = subString(dic,88,10), --fee
           @v_description  =  SubString(dic,109,50) from inserted 

select @v_createtime,@v_userid,@v_identify,@v_pageurl,@v_usertoken,@v_sourcefilename,@v_stamp,@v_stbid,@v_fee,@v_description

    if exists(select *from  inserted  where  dic like '%auth_info%')  --用户基本表
begin
insert into UserBase(userid,stamp,identify,stbid,usertoken,createtime,other)values(@v_userid,@v_stamp,@v_identify,@v_stbid,@v_usertoken,@v_createtime,'');
end
         if exists(select *from inserted  where  subString(dic,82,4)='play' )--播放表
           begin        
insert into UserPlaySongData(userid,stamp,identify,sourcefilename,createtime,other)values(@v_userid,@v_stamp,@v_identify,@v_sourcefilename,@v_createtime,'');
           end    
       if exists(select *from inserted  ) --用户日志表
           begin           
   insert into UserLog(userid,pageurl,identify,stamp,createtime,other)values(@v_userid,@v_pageurl,@v_identify,@v_stamp,@v_createtime,'');
           end


      if exists(select *from inserted  where dic like '%cost%')--计费表
           begin
                   insert into UserCharge(userid,identify,stamp,fee,description,createtime,other)values(@v_userid,@v_identify,@v_stamp,@v_fee,@v_description,@v_createtime,'');
           end

end
[解决办法]
什么不行? 调试下啊 报什么错误?还是。。。

if exists(select *from inserted  ) --用户日志表
            begin           
    insert into UserLog(userid,pageurl,identify,stamp,createtime,other)values(@v_userid,@v_pageurl,@v_identify,@v_stamp,@v_createtime,'');
            end
这判断有必要吗? 触发器是这样用的?
[解决办法]
一个动作触发一次。。
[解决办法]

引用:
什么不行? 调试下啊 报什么错误?还是。。。

if exists(select *from inserted  ) --用户日志表
            begin           
    insert into UserLog(userid,pageurl,identify,stamp,createtime,other)values(@v_userid……

这个 确实不用判断了  但是为什么还是一条数据都没有呢

[解决办法]
   if exists(select *from inserted  where dic like'WARN%')
 begin
  delete from inserted  where dic like 'WARN%';
 end
什么版本的,这句竟然不报错?
[解决办法]
引用:
if exists(select *from inserted  where dic like'WARN%')
 begin
  delete from inserted  where dic like 'WARN%';
 end
什么版本的,这句竟然不报错?

这句是有错的 ,我把他去掉了  不知道 怎么写  就可以先进行删选 ,插入的语句 先判断 如果合适的话 插入,如果不合适的话  就把他删除  这样怎么操作比较好
create  trigger tr_userLog_insert
on A1 FOR INSERT
as
   begin   
   declare
           @v_userid int,--用户Id
           @v_stamp int,--邮戳
           @v_identify nvarchar(4),--标识(page,base,play,cost)
           @v_pageurl nvarchar(50),--页面url
           @v_usertoken nvarchar(32),--用户标识
           @v_createtime datetime,--创建时间
           @v_sourcefilename nvarchar(32),--视频原文件
           @v_stbid nvarchar(24),--机顶盒id
           @v_fee nvarchar(32),--计费代码


           @v_description nvarchar(50);

--声明
    select @v_createtime = convert(datetime,subString(dic,7,19),120),--createtime
           @v_userid =  subString(dic,40,9),--userid
           @v_identify = subString(dic,82,4),--identify
           @v_pageurl = subString(dic,88,21),--pageurl
           @v_usertoken = subString(dic,167,32),--usertoken
           @v_sourcefilename = subString(dic,88,9),--sourcefilename
           @v_stamp = SubString(dic,73,7),--stamp
           @v_stbid = subString(dic,132,24),--stbid
           @v_fee = subString(dic,88,10), --fee
           @v_description  =  SubString(dic,109,50) from inserted 

select @v_createtime,@v_userid,@v_identify,@v_pageurl,@v_usertoken,@v_sourcefilename,@v_stamp,@v_stbid,@v_fee,@v_description

    if exists(select *from  inserted  where  dic like '%auth_info%')  --用户基本表
begin
insert into UserBase(userid,stamp,identify,stbid,usertoken,createtime,other)values(@v_userid,@v_stamp,@v_identify,@v_stbid,@v_usertoken,@v_createtime,'');
end
         if exists(select *from inserted  where  subString(dic,82,4)='play' )--播放表
           begin        
insert into UserPlaySongData(userid,stamp,identify,sourcefilename,createtime,other)values(@v_userid,@v_stamp,@v_identify,@v_sourcefilename,@v_createtime,'');
           end    
       if exists(select *from inserted  ) --用户日志表
           begin           
   insert into UserLog(userid,pageurl,identify,stamp,createtime,other)values(@v_userid,@v_pageurl,@v_identify,@v_stamp,@v_createtime,'');
           end
      if exists(select *from inserted  where dic like '%cost%')--计费表
           begin
                   insert into UserCharge(userid,identify,stamp,fee,description,createtime,other)values(@v_userid,@v_identify,@v_stamp,@v_fee,@v_description,@v_createtime,'');
           end

end

热点排行