首页数据库bulkinsert?sql server bulk insert 与bcp 哪个快

bulkinsert?sql server bulk insert 与bcp 哪个快

编程之家2023-10-31253次浏览

这篇文章给大家聊聊关于bulkinsert,以及sql server bulk insert 与bcp 哪个快对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

bulkinsert?sql server bulk insert 与bcp 哪个快

bulk insert 导入csv文件,如何去除文本限定符

使用代码

CSV代表逗号分隔值,有时也被称为逗号分隔的值。而

如果加载txt文件,然后文件应该有逗号分隔的值。和文件应该是这样

下面是该脚本以创建表:

CREATE TABLE Employee(

Id int,

bulkinsert?sql server bulk insert 与bcp 哪个快

Name VARCHAR(100),

Designation VARCHAR(100)

)

我创建的位置“F一个txt和CSV文件:\\ MyPublis\\的txt文件名是TestToInsert.txt

现在运行以下的脚本来从txt文件中的所有数据加载到数据库表中。如果有任何行中的任何错误将不会被插入,但其他行会被插入。

我创建Id列在Emloyee表整数,如果在我的文件中的任何行有一个字符串数据的第一部分是指会去Id列那么就不会插入该行,将与下一行continew。

bulkinsert?sql server bulk insert 与bcp 哪个快

BULK

INSERT Employee

FROM'F:\\MyPublis\\TestToInsert.txt'--location with filename

WITH

(

FIELDTERMINATOR=',',

ROWTERMINATOR='\n'

)

GO

现在看到的数据表–:

为CSV文件执行相同的脚本。

具有CSV文件–:

10, Siv_CSV, CEO

11, Brijendra_CSV, Operatore

12, Micro, Company

BULK

INSERT Employee

FROM'F:\\MyPublis\\CSVTest.csv'--location with filename

WITH

(

FIELDTERMINATOR=',',

ROWTERMINATOR='\n'

)

GO

SELECT*FROM Employee

输出将是–:

SQL SERVER 登录名 bulk insert 出现无法打开文件问题

这个问题可能是由于无法访问文件所在的网络驱动器造成的。尝试在SQL Server所在的机器上映射该网络驱动器并授予其访问权。以下是一些可能有用的步骤:

1.在SQL Server所在的机器上,使用文件资源管理器打开网络驱动器,确保你可以看到该驱动器中的文件。

2.如果SQL Server在Windows以本地系统账户运行,则可能需要将该账户添加到网络共享的访问列表中。在计算机管理窗口中编辑"服务",找到SQL Server服务并更改它的登录账户为一个具有访问网络共享权限的Windows账户。

3.执行bulk insert语句时,使用UNC路径来引用文件,如:'\\server\share\folder\test.txt'。这会避免访问权限问题,因为UNC路径不需要映射驱动器。

如果这些步骤仍然无法解决问题,请联系您的系统管理员或网络管理员以进行进一步的故障排除。

sql server bulk insert 与bcp 哪个快

今天做了一个基于SQL Server的文本文件批量导入工具,和大家分享一下心得。

方案一:

遍历文本文件,解析每一行,形成SQL语句后向数据库插入。

方案二

遍历文本文件,解析每一行,将SQL语句保存到文本文件然后执行。

方案三

使用SQL Server Bulk Insert功能披露导入数据,然后在数据库中做数据处理。

刚开始用方案一做的,50MB文本文件导入大约20-25分钟,后来进行了优化,采用数据批量插入,性能提升不大。

继续优化,使用多线程向数据库中插入数据,性能提升10-20%左右,效果也不好。

方案二没有完全测试,主要是生成SQL文件耗时15分钟左右,不太理想。

最后使用BULK INSERT,然后在数据库中写脚本对数据进行处理,50MB文件10秒即可导入

FQuery.SQL.Text:='BULK INSERT LOGDATA FROM'+ QuotedStr(FFileName)

+' WITH(FIELDTERMINATOR='','', ROWTERMINATOR=''\n'', BATCHSIZE= 500)';

FQuery.ExecSQL;

最后执行大量的UPDATE语句,将数据格式化

建议在做大数据量导入的时候还是用BULK INSERT,SQL SERVER性能在那里摆着,一个SQL 4ms,1000行就要4秒,根本快不了

测试java的insert同使用9i以后的bulk Insert的速度.

测试结果显示通过bulk Insert速度相当的快.

100000条记录

insert,---------------93秒

bulk insert-------------0.441秒

环境:

oracle 10.2.0.3 Windows 2000Server

java

代码:

SQL> desc a

Name Type Nullable Default Comments

---------------------------------------

ID INTEGER Y

NAME VARCHAR2(20) Y

bulk Insert使用的类型及过程

create or replace type i_table is table of number(10);

create or replace type v_table is table of varchar2(10);

create or replace procedure pro_forall_insert(v_1 i_table,v_2 v_table)

as

c integer;

begin

forall i in 1.. v_1.count

insert into a values(v_1(i),v_2(i));

end;

测试的java代码:

public class testOracle{

public testOracle(){

Connection oraCon= null;

PreparedStatement ps= null;

Statement st= null;

ResultSet rs= null;

try{

try{

Class.forName("oracle.jdbc.driver.OracleDriver");

} catch(ClassNotFoundException ex){}

oraCon= DriverManager.getConnection("jdbc:oracle:thin:@192.168.15.234:1521:ora10g","imcs","imcs");

oraCon.setAutoCommit(false);

} catch(SQLException ex){

ex.printStackTrace();

}

CallableStatement cstmt= null;

oracle.sql.ArrayDescriptor a= null;

oracle.sql.ArrayDescriptor b= null;

if(1== 1)

{

Object[] s1= new Object[100000];

Object[] s2= new Object[100000];

for(int i= 0; i< 100000; i++){

s1[i]= new Integer(1);

s2[i]= new String("aaa").concat(String.valueOf(i));

}

try{

a= oracle.sql.ArrayDescriptor.createDescriptor("I_TABLE", oraCon);

b= oracle.sql.ArrayDescriptor.createDescriptor("V_TABLE", oraCon);

ARRAY a_test= new ARRAY(a, oraCon, s1);

ARRAY b_test= new ARRAY(b, oraCon, s2);

cstmt= oraCon.prepareCall("{ call pro_forall_insert(?,?)}");

cstmt.setObject(1, a_test);

cstmt.setObject(2, b_test);

long aaaa= System.currentTimeMillis();

System.out.println(System.currentTimeMillis());

cstmt.execute();

oraCon.commit();

System.out.println(System.currentTimeMillis()-aaaa);

} catch(Exception e){

e.printStackTrace();

}

}

else

{

try

{

PreparedStatement oraPs= null;

String oraInsertSql=

"insert into a values(?,?)";

oraPs= oraCon.prepareStatement(oraInsertSql);

long aaaa= System.currentTimeMillis();

System.out.println(System.currentTimeMillis());

for(int i= 0; i< 100000; i++)

{

oraPs.setInt(1,i);

oraPs.setString(2, new String("aaa").concat(String.valueOf(i)));

oraPs.executeUpdate();

}

oraCon.commit();

System.out.println(System.currentTimeMillis()-aaaa);

}

catch(SQLException ex)

{

System.out.print("dddddd");

System.out.print(ex.getMessage());

}

}

try{

jbInit();

} catch(Exception ex){

ex.printStackTrace();

}

}

public static void main(String args[]){

testOracle a= new testOracle();

}

private void jbInit() throws Exception{

}

};

OK,本文到此结束,希望对大家有所帮助。

sql教程 sql入门新手教程是什么中国域名交易中心,中国最贵的域名是哪个