bulkinsert?sql server bulk insert 与bcp 哪个快
这篇文章给大家聊聊关于bulkinsert,以及sql server bulk insert 与bcp 哪个快对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
bulk insert 导入csv文件,如何去除文本限定符
使用代码
CSV代表逗号分隔值,有时也被称为逗号分隔的值。而
如果加载txt文件,然后文件应该有逗号分隔的值。和文件应该是这样
下面是该脚本以创建表:
CREATE TABLE Employee(
Id int,
Name VARCHAR(100),
Designation VARCHAR(100)
)
我创建的位置“F一个txt和CSV文件:\\ MyPublis\\的txt文件名是TestToInsert.txt
现在运行以下的脚本来从txt文件中的所有数据加载到数据库表中。如果有任何行中的任何错误将不会被插入,但其他行会被插入。
我创建Id列在Emloyee表整数,如果在我的文件中的任何行有一个字符串数据的第一部分是指会去Id列那么就不会插入该行,将与下一行continew。
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,本文到此结束,希望对大家有所帮助。