你的@@Fetch_Status使用方式有问题 ,另外循环结束位置需要变更,
改成:
while (@@FETCH_STATUS=0)
BEGIN
 select 'n0'
   
      --   if @kemu='chinese' then  @kemu='0001'
PRINT @file_name
insert into source_temp
values(@sid,@keyword,@file_dir+'\'+@file_name+'.'+@file_type,'01-01-01',@content,@kemu,@for_object,@author,'kejianchinese','1');  FETCH NEXT FROM c_1 
INTO @sid, @stitle, @for_object,@class_str,@file_name,@file_type,@file_dir,@author,@kemu,@content
END
   
CLOSE c_1
commit;

解决方案 »

  1.   

    declare c_1 cursor for select ...
    open c1
    fetch next from c1 into ...
    While @@Fetch_Status=0    --   请注意,是“=” 不是“<>”
    begin
       ...
       fetch next from c1 into ...   
    end
    close c1
    deallocate c1
      

  2.   

    @@Fetch_Status 解释一下这个变量好吗。
    还有就是为什么在循环前的一个 select 'yes' 没有输出的反映呢。他输出到那里去了呢。
      

  3.   

    @@Fetch_Status 解释一下这个变量好吗。0 FETCH statement was successful. 
    -1 FETCH statement failed or the row was beyond the result set. 
    -2 Row fetched is missing. 
    还有就是为什么在循环前的一个 select 'yes' 没有输出的反映呢。他输出到那里去了呢。
    在执行是你是看不见的,如果要DEBUG,你可以将'YES'插入到一个临时表中,比如:INSERT INTO #TEMP(COLUMN1) VALUES('YES')
      

  4.   

    @@FETCH_STATUS
    返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。返回值 描述 
    0 FETCH 语句成功。 (所以你的判断条件错了.)
    -1 FETCH 语句失败或此行不在结果集中。 
    -2 被提取的行不存在。 
      

  5.   

    update的机制:
    对原有的数据进行删除,然后再插入
    加入
    if update(列名)
    begin-----
    end
    你的触发器只会在插入数据时执行(inserted触发器),update无匹配的数据