用DTS导入,源文件类型选择文本文件.DTS很方便容易了.

解决方案 »

  1.   

    DTS可以做成包,用JOB定时执行就可以了
      

  2.   

    to crazyfor:
    dts不仅是定时执行,还定文件名,我的文件名是按日期命名的,如 X-20031201-XXXXXX.txt,
    how to do?
      

  3.   

    declare @fn varchar(20),@s varchar(1000)
    set @fn = '文件名'
    set @s = 'EXEC master..xp_cmdshell ''bcp dbname..tablename in '''
    +@fn+''' -c -Sservername -Usa -Ppassword'''
    exec(@s)
      

  4.   

    定长好办啊.我记得楼主发消息问过这个问题.你直接拆分就行啦.楼主发个文件到:msn:[email protected]
    我告诉你具体的方法.
      

  5.   

    大力和邹建,我已将文件发到你们的邮箱了,共三个文件,收到请回复,我是广东潮州的,有可能的话请你们吃大餐,hahahah.......
      

  6.   

    --下面是处理方法:--为数据导入准备表结构
    create table 表结构(id int identity(1,1),表名 sysname,序号 int
    ,字段中文说明 nvarchar(50),字段名 sysname,译码后长度 int,开始位置 int)
    insert into 表结构(表名,序号,字段中文说明,字段名,译码后长度)
    select '余额表',1,'地区号','ZONENO',5
    union all select '余额表',2,'帐户核算网点号','ACTBRNO',5
    union all select '余额表',3,'帐户物理网点号','PHYBRNO',5
    union all select '余额表',4,'帐号','ACCNO',17
    union all select '余额表',5,'币种','CURRTYPE',3
    union all select '余额表',6,'科目号','SUBNO',7
    union all select '余额表',7,'借据编号','LOADNO',18
    union all select '余额表',8,'借据序号','LOANSQNO',4
    union all select '余额表',9,'新旧帐户使用标志','NOUSEF',1
    union all select '余额表',10,'帐户属性','ACCATRBT',3
    union all select '余额表',11,'帐户状态','STATUS',1
    union all select '余额表',12,'存款限额','DEPQUOTA',18
    union all select '余额表',13,'离岸标志','OSAF',1
    union all select '余额表',14,'税款保留额度','HOLDCEIL',18
    union all select '余额表',15,'借方余额','DBALANCE',18
    union all select '余额表',16,'贷方余额','CBALANCE',18
    union all select '余额表',17,'借方核对积数','DRACM',18
    union all select '余额表',18,'贷方核对积数','CRACM',18
    union all select '余额表',19,'最后交易日','LSTTRAND',10
    union all select '余额表',20,'帐户名称','ACCNAME',60
    union all select '余额表',21,'贷款种类代码','LNCODE',3
    union all select '余额表',22,'帐户类型','ACCTYPE',1
    union all select '余额表',23,'处理标志','PROCFLAG',1
    union all select '明细表',1,'地区代码','ZONENO',5
    union all select '明细表',2,'网点代码','BRNO',5
    union all select '明细表',3,'柜员代码','TELLERNO',5
    union all select '明细表',4,'前台大交易序号','TRXSQNB',5
    union all select '明细表',5,'前台小交易序号','TRXSQNS',3
    union all select '明细表',6,'交易代码','TRXCODE', 5
    union all select '明细表',7,'工作日期','WORKDATE',10
    union all select '明细表',8,'工作时间','WORKTIME',8
    union all select '明细表',9,'记账日期','BUSIDATE',10
    union all select '明细表',10,'记账时间','BUSITIME',8
    union all select '明细表',11,'网内借方帐号','DRACCNO',17
    union all select '明细表',12,'网内借方币种','DRCURR',3
    union all select '明细表',13,'网内借方帐户科目代号','DRSBJCOD',7
    union all select '明细表',14,'网内借方新旧帐号标志','DRNOUSEF',1
    union all select '明细表',15,'网内借方集团一级帐户','DRGOACC',17
    union all select '明细表',16,'网内借方集团一级帐户科目代号','DRGOSBJC',7
    union all select '明细表',17,'网内借方集团一级帐户新旧帐号使用标志','DRGONOUF',1
    union all select '明细表',18,'发生额1','AMOUNT1',18
    union all select '明细表',19,'网内贷方帐号','CRACCNO',17
    union all select '明细表',20,'网内贷方币种','CRCURR',3
    union all select '明细表',21,'网内贷方帐户科目代号','CRSBJCOD',7
    union all select '明细表',22,'网内贷方新旧帐号标志','CRNOUSEF',1
    union all select '明细表',23,'网内贷方集团一级帐户','CRGOACC',17
    union all select '明细表',24,'网内贷方集团一级帐户科目代号','CRGOSBJC',7
    union all select '明细表',25,'网内贷方集团一级帐户新旧帐号使用标志','CRGONOUF',1
    union all select '明细表',26,'发生额2','AMOUNT2',18
    union all select '明细表',27,'网外帐号','OUTACCNO',25
    union all select '明细表',28,'凭证种类','VOUHTYPE',3
    union all select '明细表',29,'凭证号','VOUHNO',9
    union all select '明细表',30,'分离代码','SEPCODE',3
    union all select '明细表',31,'币种3','CURRTYPE3',3
    union all select '明细表',32,'发生额3','AMOUNT3',18
    union all select '明细表',33,'币种4','CURRTYPE4',3
    union all select '明细表',34,'发生额4','AMOUNT4',18
    union all select '明细表',35,'币种5','CURRTYPE5',3
    union all select '明细表',36,'发生额5','AMOUNT5',18
    union all select '明细表',37,'币种6','CURRTYPE6',3
    union all select '明细表',38,'发生额6','AMOUNT6',18
    union all select '明细表',39,'摘要','SUMMARY',20
    union all select '明细表',40,'起息日期','VALUEDAY',10
    union all select '明细表',41,'使用凭证标志','PROOFF',1
    union all select '明细表',42,'反交易标志','REVTRANF',1
    union all select '明细表',43,'冲正交易标识','UPDTRANF',1
    union all select '明细表',44,'现金标志','CASHF',1
    union all select '明细表',45,'现金分析代码','CASHNO',3
    union all select '明细表',46,'利息区分','INTDIFF',3
    union all select '明细表',47,'外汇统计代码','STATCODE',7
    union all select '明细表',48,'外汇结算方式','SETTMODE',3
    union all select '明细表',49,'存期','SAVTERM',3
    union all select '明细表',50,'原柜员号','PRETELNO',5
    union all select '明细表',51,'授权柜员号','AUTHTLNO',5
    union all select '明细表',52,'授权号','AUTHNO',6
    union all select '明细表',53,'服务界面','SERVFACE',3
    union all select '明细表',54,'终端号','TERMID',15
    union all select '明细表',55,'','FIELD1',18
    union all select '明细表',56,'','FIELD2',18
    union all select '明细表',57,'','FIELD3',18
    union all select '明细表',58,'','FIELD4',18
    union all select '明细表',59,'','FIELD5',18
    union all select '明细表',60,'','FIELD6',18
    union all select '明细表',61,'错帐日期','DATE1',10
    union all select '明细表',62,'','DATE2', 10
    union all select '明细表',63,'','NOTES1',20
    union all select '明细表',64,'','NOTES2',30
    union all select '明细表',65,'','NOTES', 40
    union all select '明细表',66,'时间标签','TIMESTMP',26
    union all select '明细表',67,'操作柜员核算网点号','TLACTBNO',5
    union all select '明细表',68,'网内借方账号物理网点号','DRPHYBNO',5
    union all select '明细表',69,'网内借方账号核算网点号','DRACTBNO',5
    union all select '明细表',70,'网内借方账户客户编号','DRCINO',15
    union all select '明细表',71,'网内借方账户户名','DRACTNAM',60
    union all select '明细表',72,'网内借方集团一级账户物理网点','DRGOPHYBNO',5
    union all select '明细表',73,'网内借方集团一级账户核算网点','DRGOACTBNO',5
    union all select '明细表',74,'网内贷方账号物理网点','CRPHYBNO',5
    union all select '明细表',75,'网内贷方账号核算网点','CRACTBNO',5
    union all select '明细表',76,'网内贷方账户客户编号','CRCINO',15
    union all select '明细表',77,'网内贷方账户户名','CRACTNAM',60
    union all select '明细表',78,'网内贷方集团一级账户物理网点','CRGOPHYBNO',5
    union all select '明细表',79,'网内贷方集团一级账户核算网点','CRGOACTBNO',5
    union all select '明细表',80,'网外账号','OTACTNO', 34
    union all select '明细表',81,'网外账户户名','OTACTNAM',60
    union all select '明细表',82,'日期3','DATA3',10
    union all select '明细表',83,'日期4','DATE4',10update 表结构 set 开始位置
    =isnull((select sum(译码后长度) from 表结构 where 表名=a.表名 and id<a.id),0)+1
    from 表结构 a--导入余额表的处理,这里只做了查询
    declare @s varchar(8000)
    set @s=''
    select @s=@s+',['+字段名+']=substring(f1,'
    +cast(开始位置 as varchar)+','+cast(译码后长度 as varchar)+')'
    from 表结构 where 表名='余额表' order by 序号
    set @s=substring(@s,2,8000)
    exec('--insert into 余额表       --这里只淙了查询,导入加上此句
    select '+@s+' from
    OPENROWSET(''MICROSOFT.JET.OLEDB.4.0''
    ,''Text;HDR=NO;DATABASE=C:\'' --c:\是目录
    ,余额表#txt) --余额表#txt是文本文件名余额表.txt
    ')set @s=''
    select @s=@s+',['+字段名+']=substring(f1,'
    +cast(开始位置 as varchar)+','+cast(译码后长度 as varchar)+')'
    from 表结构 where 表名='明细表' order by 序号
    set @s=substring(@s,2,8000)
    exec('--insert into 明细表       --这里只淙了查询,导入加上此句
    select '+@s+' from
    OPENROWSET(''MICROSOFT.JET.OLEDB.4.0''
    ,''Text;HDR=NO;DATABASE=C:\'' --c:\是目录
    ,明细表#txt) --明细表#txt是文本文件名明细表.txt
    ')
    go--删除测试用的表结构
    select * from 表结构
    drop table 表结构
      

  7.   

    czfrank(曼联球迷) ,
    DTSg不是只能定时执行,你想手动执行也可以,而且DTS包也能控制不同的文件名,多加一个SQL任务就可以了.
      

  8.   

    CREATE TABLE [dbo].[#pi_change] (
    [pi_no] [varchar] (10) NOT NULL ,
    [pi_item] [varchar] (6) NOT NULL ,
    [material] [varchar] (18) NOT NULL ,
    [pi_quantity] [varchar] (10)  NOT NULL ,
    [p_size] [varchar] (30) NULL ,
    [color] [varchar] (30) NULL ,
    [customer_color] [varchar] (30) NULL ,
    [delivery_date] [varchar] (8) NOT NULL ,
    [delivery_quantity] [varchar] (10) NOT NULL ,
    [customer] [varchar] (10) NOT NULL ,
    [po_no] [varchar] (35) NULL ,
    [po_date] [varchar] (8) NOT NULL, 
                    [outstanding_quantity] [varchar] (10) NOT NULL,
    [chn_stock] [varchar] (10) NOT NULL,
    [hk_stock] [varchar] (10) NOT NULL,
                    [flag] [varchar] (10) NOT NULL,
                    [shiptoparty] [varchar] (10) NULL
    ) ON [PRIMARY]
    bulk insert #pi_change FROM  'd:\inetpub\wwwroot\sapdata\zsales.txt' WITH(FORMATFILE = 'd:\inetpub\wwwroot\sapdata\pi.fmt')PI.FMT
    6.0
    17
    1       SQLCHAR       0       10      ""                        1     pi_no
    2       SQLCHAR       0       6       ""                        2     pi_item
    3       SQLCHAR       0       18      ""                        3     material
    4       SQLCHAR       0       10      ""                        4     pi_quantity
    5       SQLCHAR       0       30      ""                        5     p_size
    6       SQLCHAR       0       30      ""                        6     color
    7       SQLCHAR       0       30      ""                        7     customer_color
    8       SQLCHAR       0       8       ""                        8     delivery_date
    9       SQLCHAR       0       10      ""                        9     delivery_quantity
    10      SQLCHAR       0       35      ""                        11    po_no
    11      SQLCHAR       0       8       ""                        12    po_date
    12      SQLCHAR       0       10      ""                        14    chn_stock
    13      SQLCHAR       0       10      ""                        15    hk_stock
    14      SQLCHAR       0       10      ""                        13    outstanding_quantity
    15      SQLCHAR       0       10      ""                        10    customer
    16      SQLCHAR       0       3       ""                        17    shiptoparty
    17      SQLCHAR       0       1       "\r\n"                    16    flag其中要注意最后一行一定要加回車.
      

  9.   

    導入TEMP TABLE再轉換為實際的類型 
    insert into pi(pi_no,pi_item,material,pi_quantity,p_size,color,customer_color,delivery_date,delivery_quantity,customer,po_no,po_date,chn_stock,hk_stock,outstanding_quantity,flag,shiptoparty)
    select rtrim(pi_no),rtrim(pi_item),rtrim(material),cast(pi_quantity as real),rtrim(p_size),rtrim(color),rtrim(customer_color),
    substring(delivery_date,1,4)+'/'+substring(delivery_date,5,2)+'/'+substring(delivery_date,7,2) as 'delivery_date',
    cast(delivery_quantity as real),rtrim(customer),
    rtrim(po_no),
    po_date=
            case isdate(substring(po_date,1,4)+'/'+substring(po_date,5,2)+'/'+substring(po_date,7,2))
              when 0 then null
              when 1 then substring(po_date,1,4)+'/'+substring(po_date,5,2)+'/'+substring(po_date,7,2)
           end,
    cast(chn_stock as int),cast(hk_stock as int),
    cast(outstanding_quantity as int),cast(flag as int),rtrim(shiptoparty)
    from #pi_change
    drop table #pi_change
      

  10.   

    --可能是函数的问题,你试试用这个函数--返回指定字符串,指定字节开始,指定字节长度的字符串
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_substring]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[f_substring]
    GOCREATE function f_substring(@str varchar(8000),@start int,@len int)
    returns varchar(8000)
    as
    begin
    declare @i int
    exec master..sp_GetMBCSCharLen @str,@start,@i out
    if @i is not null
    begin
    set @str=substring(@str,@i,8000)
    exec master..sp_GetMBCSCharLen @str,@len,@i out
    if @i is not null set @str=left(@str,@i)
    end
    return(@str)
    end
    goselect dbo.f_substring('中ac中cce',3,3)
      

  11.   

    是类似这样的格式吗?1       SQLCHAR       0       10      ""                        1     pi_no
    2       SQLCHAR       0       6       ""                        2     pi_item
    3       SQLCHAR       0       18      ""                        3     material
    4       SQLCHAR       0       10      ""                        4     如果是在文本文件同一路径下建一个名为[Schema.ini]文本文件:
    [textdemo.txt]   //你的数据文本文件名
    CharacterSet=ANSI //OR:OEM使用的字符集
    Format=FixedLength //文件的字段为定长
    MaxScanRows=0       //行数,0为全部
    ColNameHeader=True //False 字段名称放在表的第一行中
    Col1=CustomerNumber Double Width 10    //格式:ColN=列名 类型 长度
    Col2=CustomerName Text Width 30
    Col3=......
    ..........然后一句就出来了:
    SELECT * FROM
    OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Text;Database=C:\;',   
     'SELECT * FROM [textdemo#txt]')  我还以为大力早就帮你解决了.
      

  12.   

    用分布式函数方便灵活.且不占SQLSERVER本身的数据空间.连存储过程都不用建.
    还可以用WHERE.....取部份数据.
      

  13.   

    to j9988:
        我的文件格式大概如下:2004 0002 0002 20040002111040099001101002 2003-11-19运送中外币现金
    2004 0002 0002 20040002111010299001101003 2003-09-19库存现金现实文件中含中文的字段有些是在前面,且不是仅有一个含中文的字段,但各字段是定长的,且没有分割符.
    to all master:我的qq是2521159,我今晚7-8点上线,有空的高手到时可以联系,谢谢!
      

  14.   

    那[Schema.ini]+openrowset就很好用了你干嘛不先试试建个Schema.ini呢?
    很简单啊,就一ini文件,然后用一条语句.一试就知道了.不用再说细说明吧.
    我要喝酒去了,晚上不会清醒.你找大力和邹建,他们在行,他们是高手.
      

  15.   

    刚才使用[Schema.ini]+openrowset的方法,非常满意,不过只能截取到我的文件的第71个字段(约700个字节列),后面的没有显示,也不出错,配置文件检查没有问题,为什么?
      

  16.   

    这是WINDOWS限制:
    ·字段:不超过255个字符
    ·字段名称:不超过64个字符
    ·字段宽度:不超过32,766个字符
    ·记录大小:不超过65,000个字节
      

  17.   

    要看了实际文本和你的INI文件才知道。