功能:想做一个存储过程,输入表名,文本文件名及其路径,完成指定表名的表的列名和数据导出到文本文件思路:1.利用parsename()解析表名,得到完整表名      2.利用sys.columns视图得到所有列的记录行(column_id, name)      3.使用2中得到的记录,利用column_id的顺序,将对应的name转换成预备输出的1条列名记录      4.利用表名查出所有数据,并与3中的那条记录合并在一起(有列名的数据才有意义)      5.利用exec master..xp_cmdshell '' 内嵌bcp命令的将4得到的数据导出问题:1,2,3的工作已经完成,4不能完成,转成的列名都是字符型的数据,而所对应的数据类型不一定都是字符型的,因此无      法合并(union),如果不采用合并后一起导出,而采用分两次分别把列名和数据导出,则文本文件会被覆盖。      请各位帮忙  1.是否可以实现不考虑数据类型的合并
                  2.或者是否可以实现追加方式的导出文本

解决方案 »

  1.   


    /*
    1(int)      2 nvarchar(100)           3 (float)--这是真实的列,每列的数据类型不一样
    -----------------------------------------------
    学生ID           学生姓名                    分数             --第一行是字符型的
    1               李                          52.2
    2               高                          30.0
    */
      

  2.   

    是的啊,bcp保存表数据,不考虑数据类型,多好啊!
      

  3.   

    这里的关键是,导出去要有列名而且列名作为一行数据,第二行开始才是表里面的数据。
    bcp 能做到连列名一起导出吗?
      

  4.   


    你以为 你这列名混带数据的txt能直接用?
      

  5.   

    union  前后的查询转列的数据类型!
      

  6.   


    EXEC xp_cmdshell 'BCP "SELECT ''列名1'',''列名2'' UNION ALL SELECT col1,col2 FROM tb" queryout x:\aa.txt -t, -Usa -Ppassword'
      

  7.   

    --方法一 
    create   view   vi_tablename 
    as 
    select    'c1 '   as   c1    --人为的加入一行作为表头         
    union    
    select   c1   from   tablename 
      
    exec   master..xp_cmdshell    'bcp    "select   c1   FROM   abc.dbo.vi_tablename    
    where   c1= ' '王五 ' 'or   c1= ' 'c1 ' '    "   queryout   c:\temp.xls   -c   -S服务器名   -Usa   -P密码 ' 
      
    --方法二 
    使用文件复制的方法. 
      
    建立一个已经设置好格式的Excel文件做为模板.   每次导现都从这个模板文件复制一下,   复制成你真正用于导出数据的Excel文件. 
      
    这个复制的操作,   如果是在数据库服务器上完成,   可以使用xp_cmdshell实现文件复制(如果不在数据库服务器上,   则还是要写VBScript脚本,   不过比较操作ExcelApplication容易得多) 
    exec   master.dbo.xp_cmdshell    'copy   x:\model.xls   x:\use.xls ' 
    贴子来源飞诺网(http://bbs.firnow.com) 详细出处参考:http://bbs.firnow.com/dview4t134423.html
      

  8.   


    楼主想做成通用的估计是行不通的!直接导出表吧!导出后再到TXT里修改下导出的列名就可以了,在SQL那么麻烦!直接在TXT里改,只是一行而已!而且打开后还是第一行!
      

  9.   


    if object_id('test') is not null
    drop table test
    gocreate table test(a int ,b int)
    goselect '列名1', '列名2'
    union all
    select a, b
    from test
    godrop table test/*
    消息 245,级别 16,状态 1,第 2 行
    在将 varchar 值 '列名1' 转换成数据类型 int 时失败。
    */