将CSV文件导出至SqlServer的三种方法
发布时间:2020-12-12 15:40:15 所属栏目:MsSql教程 来源:网络整理
导读:? 1.如果服务端在本地,可以用下列语句导入,很省事 InsertStr:=Format('BULK INSERT DRYB_FYMX FROM %s WITH (FIELDTERMINATOR =%s,ROWTERMINATOR = %s)',[QuotedStr(CsvFile),QuotedStr(','),QuotedStr('/n')]); ExecAdoSQL(DM.HisConn,InsertStr); 2.可以用
? 1.如果服务端在本地,可以用下列语句导入,很省事 InsertStr:=Format('BULK INSERT DRYB_FYMX FROM %s WITH (FIELDTERMINATOR =%s,ROWTERMINATOR = %s)',[QuotedStr(CsvFile),QuotedStr(','),QuotedStr('/n')]);ExecAdoSQL(DM.HisConn,InsertStr); 2.可以用字符串数据,但是字符串字段值中如果有逗号就造成插入数据列不一致,切记 if FileExists(CsvFile) then begin CsvList:=TStringList.Create; CsvStr:= TStringList.Create; SqlStrs:=TStringList.Create; CsvList.LoadFromFile(CsvFile); HeadStr:='INSERT INTO [DRYB_FYMX](定点医疗机构编号,流水号,处方号,单据号,' +'医院收费项目内码,医院收费项目名称,中心收费项目内码,中心收费项目名称,' +'交易类型,个人编号,处方日期,结算日期,收费类别,报销类别,收费项目种类,' +'单价,数量,金额,自理金额,医院承担金额,最高限价,自费金额,自付比例,' +'审批编号,处方药标志,剂型,规格,每次用量,使用频次,医生姓名,用法,' +'单位,处方医师,科别名称,执行天数,有效标志,退费流水号,全额自费标志,' +'结算标志,业务周期号,发送方交易流水号,草药单复方标志,跨段标记,' +'基本医疗部分,身份证号,医保属类 )'; for i:=0 to CsvList.Count-1 do begin CsvStr.Delimiter:=#9; CsvStr.DelimitedText:= CsvList[i]; ValueStr:='Values('; for j:=0 to CsvStr.Count-1 do begin if (j=11) then Continue; if (j=13) then continue; if j<>0 then ValueStr:=ValueStr+','+QuotedStr(Trim(CsvStr[j])) else ValueStr:=ValueStr+QuotedStr(Trim(CsvStr[j])); end; ValueStr:=ValueStr+')'; Sql:=HeadStr+ValueStr; SqlStrs.Add(Sql); end; CsvList.Free; CsvStr.Free; end; SqlStrs.SaveToFile('D:/123.txt'); 3. 因此提取CSV文件数据最好的办法是: if FileExists(CsvFile) then begin CsvConn.Connected:=False; CsvConn.ConnectionString:=Format('Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;' +'Data Source=%s;Mode=Share Deny None;' +' Extended Properties="text;HDR=No;FMT=Delimited";' +'Jet OLEDB:System database="";Jet OLEDB:Registry Path="";' +'Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=96;' +'Jet OLEDB:Database Locking Mode=0;' +'Jet OLEDB:Global Partial Bulk Ops=2;' +'Jet OLEDB:Global Bulk Transactions=1;' +'Jet OLEDB:New Database Password="";' +'Jet OLEDB:Create System Database=False;' +'Jet OLEDB:Encrypt Database=False;' +'Jet OLEDB:Don''t Copy Locale on Compact=False;' +'Jet OLEDB:Compact Without Replica Repair=False;' +'Jet OLEDB:SFP=False',[ExtractFilePath(CsvFile)]); CsvConn.Connected:=True; CsvQuery.Close; CsvQuery.SQL.Text:=Format('select * from %s',[ExtractFileName(CsvFile)]); CsvQuery.Open; SqlStrs:= TStringList.Create; HeadStr:='INSERT INTO [DRYB_FYMX](定点医疗机构编号,' +'医院收费项目内码,' +'交易类型,' +'单价,' +'审批编号,' +'单位,' +'结算标志,' +'基本医疗部分,医保属类 )'; CsvQuery.First; for i:=0 to CsvQuery.RecordCount-1 do begin ValueStr:='Values('; for j:=0 to CsvQuery.FieldCount-1 do begin if j<>0 then ValueStr:=ValueStr+','+QuotedStr(CsvQuery.Fields[j].AsString) else ValueStr:=ValueStr+QuotedStr(CsvQuery.Fields[j].AsString); end; ValueStr:=ValueStr+')'; Sql:=HeadStr+ValueStr; SqlStrs.Add(Sql); CsvQuery.Next; end; Common.TransData(DM.Conn,SqlStrs); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |