将CSV文件导出至SqlServer的三种方法

 

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);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值