结构如下:
有三张表:tbTotal,tbImport,tbExport,tbTotal与tbExport的结构相同,tbImport中的字段可能与二者不同,但有关键字字段相同。tbTotal:id,t1,t2
tbImport:id,i1,i2,i3...
tbExport:id,t1,t2解释:tbTotal中可能有1万条数据,tbImport中可能有500条数据,它们以id字段相连,tbImport中的id列的数据包括在tbTotal中。目的:如果tbImport中的id列与tbTotal中的id列相等,就将tbTotal中的t1字段的值替换成为tbImport中的i1字字段的值,t2替换成为i2的值,然后,将发生变化的行,即替换后的行导入到tbExport中,最后,将tbExport所有的数据导出至EXCEL,比如d:\export.xls
结果:tbTotal、tbImport中的数据保持不变,tbExport中的数据为tbTotal与tbImport中合并数据后的行。
实际存有数据的就是tbTotal与tbImport,tbExport是否应该存在,或者用一个临时表来代替也行。希望能在一个存储过程中实现上述功能

解决方案 »

  1.   

    --直接用bcp
    EXEC master..xp_cmdshell 'bcp select m.* from tbImport m , tbTotal n where m.id = n.id out d:\export.xls -c -q -S"servername" -U"sa" -P""'--如果不行,就生成表tmp
    select m.* into tmp from tbImport m , tbTotal n where m.id = n.id
    EXEC master..xp_cmdshell 'bcp tmp out d:\export.xls -c -q -S"servername" -U"sa" -P""'
      

  2.   

    谢谢。不过没有替换值啊如果tbImport中的id列与tbTotal中的id列相等,就将tbTotal中的t1字段的值替换成为tbImport中的i1字字段的值,t2替换成为i2的值,然后,将发生变化的行,即替换后的行导入到tbExport中
      

  3.   

    select m.除了t1,t2的起他字段,n.i1 t1 , n.i2 t2
    from tbTotal m, tbImport n
    where m.id = n.id帮上面的SQL语句替换成这句。
    即:
    --直接用bcp
    EXEC master..xp_cmdshell 'bcp select m.除了t1,t2的起他字段,n.i1 t1 , n.i2 t2
    from tbTotal m, tbImport n
    where m.id = n.id
    out d:\export.xls -c -q -S"servername" -U"sa" -P""'--如果不行,就生成表tmp
    select m.除了t1,t2的起他字段,n.i1 t1 , n.i2 t2 into tmp
    from tbTotal m, tbImport n
    where m.id = n.idEXEC master..xp_cmdshell 'bcp tmp out d:\export.xls -c -q -S"servername" -U"sa" -P""'
      

  4.   

    测试成功,谢谢,但就是不明白关键的替换n.i1 t1 , n.i2 t2 
    这个是什么意思,能不能给解释一下,嘿嘿
      

  5.   

    你不是需要替换(其实只是个查询)吗?那tbTotal表t1,t2的不要取出来,用tbImport表的i1当做t1,i2当作t2.
    你只是个查询,又不需要替换原来表中的数据,对吧?