create table tab(id int,name sysname,sex sysname,score1 int,score2 int,sum_score int)
go
create trigger tr1 on tab for insert as
begin
declare @id varchar(10),@name sysname,@sex sysname,@score1 sysname,@score2 sysname,@sum_score sysname,@sql varchar(8000)
select @id='',@name='',@sex='',@score1='',@score2='',@sum_score='',@sql=''
select @id=cast(id as varchar),@name=name,@sex=sex,@score1=cast(score1 as varchar),@score2=cast(score2 as varchar),@sum_score=cast(sum_score as varchar)
from inserted
select @sql= 'echo '+ 'INSERT Table1 VALUES('+@id+',"'+@name+'","'+@sex+'",'+@score1+','+@score2+','+@sum_score+')' + '>>c:\test.txt'
exec master..xp_cmdshell  @sql
end
go
insert tab values (1,'001','man',10,20,30)

解决方案 »

  1.   


    文件传输总分部数据写procedure把新增修改记录导出文本,这样需要在表中添加判断标志,
    如:1 未传传输,2 已上传把文本传到其他服务器,这个可以用前台软件写个传输文件程序(或者直接用
    master..xp_cmdshell),取指定服务器目录内的文件,再用过程导入数据库,导入时进行数据过滤
    程序可以这样写过程 比如表名叫table 状态字段为state (1 未传传输,2 已上传)CREATE PROCEDURE sp_convert --数据转换过程
    with recompile ,encryption
    as
    declare
      @bcp varchar(600),
      @path char(100),
      @file char(200),
      @user char(10),
      @mdate char(8)
      @mdept char(5),
      @passwd char(8)
      if  @@TRANCOUNT >0
           COMMIT TRAN 
      select @user=suser_name()
      select @passwd=password from login where code=ltrim(rtrim(@username)) --用户登录表
      select @path=ltrim(rtrim(up_path))+'download\'
        from parm --运行参数表 包括文件传输路径
      select @mdate=convert(char(8),cast(open_close as datetime),112)
      select @file='file'+@mdate 得到带日期的txt文件
       
    --convert data to txtselect @bcp='bcp "select * from dbname..table where state=1 "  queryout '+ltrim(rtrim(@path))+ltrim(rtrim(@file))+'.txt'+' -c -t, -U '+@user+'-P '+@passwd --选择未传输数据导出
    exec master..xp_cmdshell @bcp
    begin tran
    update dbname..table  set state=1 where ct_state=1 --更新状态
    commit tran
    CREATE PROCEDURE sp_copyfile --文件copy过程
    with recompile,encryption
    as
    declare
      @path char(100),
      @copy char(300),
      @user char(10),
      @passwd char(8),
      @bcpname char(300)if  @@TRANCOUNT >0
        COMMIT TRAN 
      select @usere=suser_name()
      select @passwd=password from login where code=ltrim(rtrim(@username))
      select @path=ltrim(rtrim(up_path))+'upload\'  from parm 
    --copy files to servers
    select @copy='copy '+ltrim(rtrim(@path))+'file*.txt '+ltrim(rtrim(@path))+substring(convert(char(8),getdate(),112),7,2)
    exec master..xp_cmdshell @copy
    select @copy='del '+ltrim(rtrim(@pathname))+'file*.txt' --copy完成删除文件
    exec master..xp_cmdshell @copyname
      if  @@TRANCOUNT >0
               COMMIT TRAN 
    return 总部每天做日结处理,也用同样的方法导出数据成文本,在分部与总部联接传输数据据同时把
    总部数据传入分部