现在有这样一个需求:
SQL2000数据表中有N行数据,如下所示:序号  字段A   字段B(Text型)
1     avsdd   大声道撒的萨达倒萨倒萨
2     ueaed   大声道撒倒萨倒萨倒萨倒
..........................我现在想写一个程序,需要将表中的每一行导出至一个txt文件,同时该文件需要按照 字段A的内容.txt这样的命名规则命名。即第一个TXT文件名称为:avsdd.txt,其中内容为字段B的内容。请问该如何实现?

解决方案 »

  1.   

    那你写个循环,用BCP导出呗。
      

  2.   

    if exists(select 1 from sysobjects where name='file2table' and objectproperty(id,'isprocedure')=1)
     drop procedure file2table
     go
     create procedure file2table 
       @servername varchar(200) --服务器名称
      ,@username varchar(200)   --用户名,如果用nt验证方式,则为空''
      ,@password varchar(200)   --密码
      ,@tbname varchar(500)     --数据库
      ,@filename varchar(1000)  --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt
      ,@isout bit               --1为导出,0为导入
     as
     declare @sql varchar(8000)------如果@tbname参数为ksoa类型,则默认导出整个数据库中的数据,如果@tbname参数为ksoa..spkfk则默认导出某个表的数据
     begin --导出整个数据库,定义游标,取出所有的用户表
       declare @m_tbname varchar(250)
       if right(@filename,1)<>'\' set @filename=@filename+'\'--如果不是文件夹根目录,设置为根目录
       set @m_tbname='declare #tb cursor for select name from '+@tbname+'.dbo.sysobjects where xtype=''u''
                                             and (name not like ''wms_%'' and name not like ''HR_%'' and name not like ''tmp_%'')'
       exec(@m_tbname)
       open #tb
       fetch next from #tb into @m_tbname
       while @@fetch_status=0
         begin
           set @sql='bcp '+@tbname+'.'+'dbo.'+@m_tbname+case when @isout=1 then ' out ' else ' in ' end
               +  @filename+@m_tbname+'.txt -w'
               +' /S '+@servername +case when isnull(@username,'')='' then '' else ' /U '+@username end
               +' /P '+isnull(@password,'')
     exec master.dbo.xp_cmdshell @sql
     fetch next from #tb into @m_tbname
     end
     close #tb
     deallocate #tb 
     end
     go
      ----导入整个数据库
      exec file2table 'yangxing','sa','','KSOA','E:\Music',1
      ----导入
      exec file2table '127.0.0.1','sa','','ksoa','E:\admin\',1导出数据库表为文本文件!每张表对应一个文件!表名为文件名!楼主可以改一下相应的地方
      

  3.   

    字段A不是唯一的。
    每一个导出的文件大概在10K~20K之间吧。
      

  4.   

    /** 导入文本文件 */
    EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword' /** 导出文本文件 */
    EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword' 
    或 
    EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword' /**导出到TXT文本,用逗号分开*/ 
    exec master..xp_cmdshell 'bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password' 
    BULK INSERT 库名..表名 
    FROM 'c:\test.txt' 
    WITH ( 
    FIELDTERMINATOR = ';', 
    ROWTERMINATOR = '\n' 
      

  5.   

    -------------------------------------------
    --  Author : liangCK 小梁
    --  Comment: 小梁 爱 兰儿
    --  Date   : 2009-09-09 16:41:29
    -------------------------------------------
     
    --> 生成测试数据: [tb]
    IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
    CREATE TABLE [tb] (序号 INT,字段A VARCHAR(5),字段B NTEXT)
    INSERT INTO [tb]
    SELECT 1,'avsdd','大声道撒的萨达倒萨倒萨' UNION ALL
    SELECT 2,'ueaed','大声道撒倒萨倒萨倒萨倒'--SQL查询如下:DECLARE cur CURSOR FOR
        SELECT 序号,字段A FROM tb;DECLARE @序号 INT,@字段A VARCHAR(20);
    DECLARE @cmd NVARCHAR(4000),@i INT;
    SET @i = 1;DECLARE @dir VARCHAR(128);  --目标路径
    SET @dir = 'E:\';OPEN cur;
    FETCH NEXT FROM cur INTO @序号,@字段A;
    WHILE @@FETCH_STATUS=0
        BEGIN
            SET @cmd = N'bcp "SELECT 字段B FROM tempdb..tb" queryout ' + @dir + @字段A
                      + '.txt -S.\SQLExpress -T -c -F' + RTRIM(@i) + ' -L' + RTRIM(@i);
            EXEC xp_cmdshell @cmd,NO_OUTPUT;
            SET @i = @i + 1;
            FETCH NEXT FROM cur INTO @序号,@字段A;
        END
    CLOSE cur;
    DEALLOCATE cur;--删除测试
    DROP TABLE tb;
      

  6.   

    -S.\SQLExpress 换成你的服务器名称..如果是默认实例,可以不用指定-S
      

  7.   

    sql2000:库名test,表名t,导出目录d:\gg\CREATE TABLE t(xh INT,a VARCHAR(20),b TEXT) 
    insert t select 1,'aaaa','大声道撒的萨达倒萨倒萨' 
    union all select  2,'bbbb'  ,'大声道撒倒萨倒萨倒萨倒' 
    union all select  3,'cccc'  ,'大声道f23dfsdfadf撒倒萨倒萨倒萨倒' exec MASTER.dbo.xp_execresultset 'SELECT ''exec master.dbo.xp_cmdshell ''''bcp "select b from test.dbo.t where xh=''+LTRIM(xh)+ ''" queryout "d:\gg\''+ a+''.txt" -c -Sxxbb -Usa -Psunway''''''
    FROM t',
    N'test'
      

  8.   

    TO:liangCK
    我在查询分析器中测试了一下,命令执行成功,但是没有在D盘创建文件,D盘是具有写权限的。
      

  9.   

    TO:chuifengde这个执行成功,非常感谢。结贴。