在SQL Server中,BULK INSERT是用来将外部文件以一种特定的格式加载到数据库表的T-SQL命令。该命令使开发人员能够直接将数据加载到数据库表中,而不需要使用类似于Integration Services这样的外部程序。虽然BULK INSERT不允许包含任何复杂的逻辑或转换,但能够提供与格式化相关的选项,并告诉我们导入是如何实现的。BULK INSERT有一个使用限制,就是只能将数据导入SQL Server。
1、 bulk insert需要具备三个条件
a) 单表数据导入
b) 存放数据的文件
c) 描述存放数据的文件格式的格式化文件
d) Bulk insert语法
2、 Bulk insert可以对单表数据进行批量导入,速度非常快
3、 txt文件存放数据,列与列之间,组与组之间采用不同的分隔符分隔,
如:
Aaa{,}bbb{,}ccc{,}ddd
Xxx{,}yyy{,}zzz{,}ddd
以上,列与列的分隔符为{,},组与组的分隔符为\r\n(注意:分隔符最好要比较特殊,以免造成错误)
4、 xml文件
如:
<?xmlversion="1.0"?>
<BCPFORMATxmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORDxmlns=""> <!—记录-->
<FIELDID="1"xsi:type="CharTerm"TERMINATOR="{,}" /> <!—第几列、数据类型、结束符-->
<FIELDID="2"xsi:type="CharTerm"TERMINATOR="{,}" />
<FIELDID="3"xsi:type="CharTerm"TERMINATOR="{,}" />
<FIELDID="4"xsi:type="CharTerm"TERMINATOR="{,}" />
<FIELDID="5"xsi:type="CharTerm"TERMINATOR="{\r\n}" /> <!—注意最后一列的结束符,一般为\r\n-->
</RECORD>
<ROWxmlns=""> <!—对上面的列命名并设置数据类型-->
<COLUMNSOURCE="1"NAME="receivePhoneNum"xsi:type="SQLVARYCHAR" /> <!—第几列(对应上面的第几列)、列明、数据类型-->
<COLUMNSOURCE="2"NAME="preSendTime"xsi:type="SQLDATETIME" />
<COLUMNSOURCE="3"NAME="addTime"xsi:type="SQLDATETIME" />
<COLUMNSOURCE="4"NAME="smsContentId"xsi:type="SQLINT" />
<COLUMNSOURCE="5"NAME="shortName"xsi:type="SQLVARYCHAR" />
</ROW>
</BCPFORMAT>
5、 Bulk insert语法
如:
insert into dbo.smsSend_t_send(receivePhoneNum, preSendTime, addTime, smsContentId, shortName)
select receivePhoneNum, preSendTime, addTime, smsContentId,
from openrowset(
bulk 'D:\SmsSend\hz.txt'
,formatfile='D:\SmsSend\formatfile.xml'
)txt
D:\SmsSend\hz.txt 是数据存放的文件的路径
D:\SmsSend\formatfile.xml 是解析上面文件的格式化配置文件
标签:insert,文件,bulk,导入,分隔符,SmsSend,txt From: https://blog.51cto.com/u_15906220/5920644