数据文件的后缀名 是不定的,但是是dbf文件(dBase or FoxPro),现在可以用sql操作后缀名为dbf的文件,但是如果后缀名不是dbf,sql就不能操作这些文件!请问怎么在不修改文件后缀名的情况下操作这将MSSQL里数据导入到这些文件中?加此贴。

http://topic.csdn.net/u/20091217/16/6f52615f-a2b9-4892-9a2d-815abf99584e.html

解决方案 »

  1.   

    但是如果后缀名不是dbf
    那是不是DBF文件呢?
    如果是,还是可以照样导入,如果不是,则不同的文件类型需要不同的导入语句.各种导入导出语句./******* 导出到excel 
    EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""' /*********** 导入Excel 
    SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
    'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions /*动态文件名 
    declare @fn varchar(20),@s varchar(1000) 
    set @fn = 'c:\test.xls' 
    set @s ='''Microsoft.Jet.OLEDB.4.0'', 
    ''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0''' 
    set @s = 'SELECT * FROM OpenDataSource ('+@s+')...sheet1$' 
    exec(@s) 
    */ SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+' ' 转换后的别名 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
    'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions /********************** EXCEL导到远程SQL 
    insert OPENDATASOURCE( 
    'SQLOLEDB', 
    'Data Source=远程ip;User ID=sa;Password=密码' 
    ).库名.dbo.表名 (列名1,列名2) 
    SELECT 列名1,列名2 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
    'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions 
    /** 导入文本文件 
    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' 

    --/* dBase IV文件 
    select * from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0' 
    ,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]') 
    --*/ --/* dBase III文件 
    select * from 
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0' 
    ,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]') 
    --*/ --/* FoxPro 数据库 
    select * from openrowset('MSDASQL', 
    'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\', 
    'select * from [aa.DBF]') 
    --*/ /**************导入DBF文件****************/ 
    select * from openrowset('MSDASQL', 
    'Driver=Microsoft Visual FoxPro Driver; 
    SourceDB=e:\VFP98\data; 
    SourceType=DBF', 
    'select * from customer where country != "USA" order by country') 
    go 
    /***************** 导出到DBF ***************/ 
    如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句 insert into openrowset('MSDASQL', 
    'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\', 
    'select * from [aa.DBF]') 
    select * from 表 说明: 
    SourceDB=c:\ 指定foxpro表所在的文件夹 
    aa.DBF 指定foxpro表的文件名. 
    /*************导出到Access********************/ 
    insert into openrowset('Microsoft.Jet.OLEDB.4.0', 
    'x:\A.mdb';'admin';'',A表) select * from 数据库名..B表 /*************导入Access********************/ 
    insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0', 
    'x:\A.mdb';'admin';'',A表) 文件名为参数 
    declare @fname varchar(20) 
    set @fname = 'd:\test.mdb' 
    exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'', 
    '''+@fname+''';''admin'';'''', topics) as a ') SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
    'Data Source="f:\northwind.mdb";Jet OLEDB:Database Password=123;User ID=Admin;Password=;')...产品 ********************* 导入 xml 文件 DECLARE @idoc int 
    DECLARE @doc varchar(1000) 
    --sample XML document 
    SET @doc =' 
    Customer was very satisfied 
    Important 
    Happy Customer. 

    -- Create an internal representation of the XML document. 
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc -- Execute a SELECT statement using OPENXML rowset provider. 
    SELECT * 
    FROM OPENXML (@idoc, '/root/Customer/Order', 1) 
    WITH (oid char(5), 
    amount float, 
    comment ntext 'text()') 
    EXEC sp_xml_removedocument @idoc 
      

  2.   

    是的,我改成dbf后缀之后可以打开,并且可以用sql 写入数据,
      

  3.   

    你的不是DBF后缀名的文件是什么文件??可以用格式化文件导入
      

  4.   

    如何使用BCP导出格式文件 BCP不仅可以根据表、视图导入导出数据,还可以配合格式文件对导入导出数据进行限制。格式文件以纯文本文件形式存在,分为一般格式和xml格式。用户可以手工编写格式文件,也可以通过BCP命令根据表、视图自动生成格式文件。 EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:\currency_format1.fmt -c -T' 上述命令将currency表的结构生成了一个格式文件currency_format1.fmt,下面是这个格式文件的内容。 9.0 

    1 SQLCHAR 0 6 "\t" 1 CurrencyCode SQL_Latin1_General_CP1_CI_AS 
    2 SQLCHAR 0 100 "\t" 2 Name SQL_Latin1_General_CP1_CI_AS 
    3 SQLCHAR 0 24 "\r\n" 3 ModifiedDate  这个格式文件记录了这个表的字段(共3个字段)类型、长度、字符和行分割符和字段名等信息。 BCP还可以通过-x选项生成xml格式的格式文件。 EXEC master..xp_cmdshell 'BCP AdventureWorks.sales.currency format nul -f c:\currency_format2.fmt -x -c -T'  
    xml格式文件所描述的内容和普通格式文件所描述的内容完全一样,只是格式不同。 
      

  5.   

    如果是dbf后缀就不行。insert into openrowset('MICROSOFT.JET.OLEDB.4.0', 
    'dBase IV;DATABASE=D:\whonet5\Data', 
    'select * from [W1209CHN.hbc]') select * from abcW1209CHN.hbc 不是dbf后缀。不知道怎么弄了。
      

  6.   

    你这个:
    W1209CHN.hbc 是不是dbf文件?如果是,行,如果不是,则不行.不是你说的,把W1209CHN.hbc --> W1209CHN.dbf.
      

  7.   

    地址错了:http://topic.csdn.net/u/20091217/16/6f52615f-a2b9-4892-9a2d-815abf99584e.html
      

  8.   


    至少可以用 excel 打开。sql 可以读写。
      

  9.   


    关键是怎么让sql 自动生成dbf文件,而不是存在dbf文件的情况下添加数据.
     可以实现吗?

      

  10.   


    (1)用BCP 将MSSQL 的数据导出,导成 txt 或 excel
    (2)用dBase or FoxPro导入txt 或 excel
      

  11.   


    if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_exporttb]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)   
      drop   procedure   [dbo].[p_exporttb]   
      GO   
        
      /*--数据导出dBase   
        
      导出查询语句中的数据到dBase,如果文件不存在,将自动创建文件   
      基于通用性考虑,仅支持导出标准数据类型   
      --邹建   2003.10--*/   
        
      /*--调用示例   
        
      --导出dBase   
      p_exporttb   @sqlstr='select   *   from   地区资料',@path='c:\',@over=1   
      --*/   
      create   proc   p_exporttb   
      @sqlstr   varchar(8000), --要导出的查询名   
      @path   nvarchar(1000), --文件存放目录   
      @fname   nvarchar(250)='temp.dbf',--文件名,默认为temp   
      @over   bit=0 --是否覆盖已经存在的文件,如果不覆盖,则直接追加   
      as   
      declare   @err   int,@src   nvarchar(255),@desc   nvarchar(255),@out   int   
      declare   @obj   int,@constr   nvarchar(1000),@sql   varchar(8000),@fdlist   varchar(8000)   
        
      --参数检测   
      if   isnull(@fname,'')=''   set   @fname='temp.dbf'   
        
      --检查文件是否已经存在   
      if   right(@path,1)<>'\'   set   @path=@path+'\'   
      create   table   #tb(a   bit,b   bit,c   bit)   
      set   @sql=@path+@fname   
      insert   into   #tb   exec   master..xp_fileexist   @sql   
      if   exists(select   1   from   #tb   where   a=1)   
      if   @over=1   
      begin   
      set   @sql='del   '+@sql   
      exec   master..xp_cmdshell   @sql,no_output   
      end   
      else   
      set   @over=0   
      else   
      set   @over=1   
        
      --数据库创建语句   
      set   @sql=@path+@fname   
      set   @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended   Properties="dBASE   5.0;'   
      +';HDR=NO;DATABASE='+@path+'"'   
        
      --创建表的SQL   
      declare   @tbname   sysname   
      set   @tbname='##tmp_'+convert(varchar(38),newid())   
      set   @sql='select   *   into   ['+@tbname+']   from('+@sqlstr+')   a'   
      exec(@sql)   
        
      --连接数据库   
      exec   @err=sp_oacreate   'adodb.connection',@obj   out   
      if   @err<>0   goto   lberr   
        
      exec   @err=sp_oamethod   @obj,'open',null,@constr   
      if   @err<>0   goto   lberr   
        
      --创建表的SQL   
      select   @sql='',@fdlist=''   
      select   @fdlist=@fdlist+','+a.name   
      ,@sql=@sql+',['+a.name+']   '   
      +case   when   b.name   in('char','nchar','varchar','nvarchar')   then   
        'text('+cast(case   when   a.length>250   then   250   else   a.length   end   as   varchar)+')'   
      when   b.name   in('tynyint','int','bigint','tinyint')   then   'int'   
      when   b.name   in('smalldatetime','datetime')   then   'datetime'   
      when   b.name   in('money','smallmoney')   then   'money'   
      else   b.name   end   
      FROM   tempdb..syscolumns   a   left   join   tempdb..systypes   b   on   a.xtype=b.xusertype   
      where   b.name   not   in('image','text','uniqueidentifier','sql_variant','ntext','varbinary','binary','timestamp')   
      and   a.id=(select   id   from   tempdb..sysobjects   where   name=@tbname)   
      select   @sql='create   table   ['+@fname   
      +']('+substring(@sql,2,8000)+')'   
      ,@fdlist=substring(@fdlist,2,8000)   
        
      if   @over=1   
      begin   
      exec   @err=sp_oamethod   @obj,'execute',@out   out,@sql   
      if   @err<>0   goto   lberr   
      end   
        
      exec   @err=sp_oadestroy   @obj   
        
      set   @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''dBase   5.0;DATABASE='   
      +@path+''',''select   *   from   ['+@fname+']'')'   
        
      --导入数据   
      exec('insert   into   '+@sql+'('+@fdlist+')   select   '+@fdlist+'   from   ['+@tbname+']')   
        
      set   @sql='drop   table   ['+@tbname+']'   
      exec(@sql)   
        
      return   
        
      lberr:   
      exec   sp_oageterrorinfo   0,@src   out,@desc   out   
      lbexit:   
      select   cast(@err   as   varbinary(4))   as   错误号   
      ,@src   as   错误源,@desc   as   错误描述   
      select   @sql,@constr,@fdlist   
      go
      

  12.   

    MIicrosoft JET Database Engine 找不到可安装的ISAM ,
    安装? 
      

  13.   

     --数据库创建语句   
      set   @sql=@path+@fname   
      set   @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended   Properties="dBASE   5.0;'   
      +';HDR=NO;DATABASE='+@path+'"'   --- --数据库创建语句   
      set   @sql=@path+@fname   
      set   @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="dBASE   5.0;'   
      +';HDR=NO;DATABASE='+@path+'"'   
    exec   @err=sp_oadestroy   @obj   
        
      set   @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''dBase   5.0;DATABASE='   
      +@path+''',''select   *   from   ['+@fname+']'')'   
    ----exec   @err=sp_oadestroy   @obj   
        
      set   @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''dBase 5.0;DATABASE='   
      +@path+''',''select   *   from   ['+@fname+']'')'   
      

  14.   

    注意连接串中的空格,一般从网上复制的会多一些怪字符, 你检查 一下相应的比对:connectionstrings
      

  15.   

    自己又在网上找了些东西,问题基本解决了。请各位高手们去我这个帖子,我也准备结了 。石头哥,f哥 。。http://topic.csdn.net/u/20091217/16/6f52615f-a2b9-4892-9a2d-815abf99584e.html