BLUK INSERT导入数据,想必大家都用过的吧。
最近刚接触过找个,有些疑问想请教大家:
1.关于formatfile到底是应该是个什么样子的格式,里面的内容到底是个什么样的。
2.我目前需要做的的 将一个文本文档A.TXT(里面不包括标题),以空格还是TALBE形式分隔开的的数据,一共51列。导入到数据库里面的表A里面去,找个表A里面一共有41个字段,和A.TXT里面的前面的41列是一一对应的。
3.我现在的问题就是 导入的时候一直出现截断字符串。一直很悲剧
提问我要如何就取前面的41列呢,另外就是字段分隔符是| 这个竖线。第二个问题就是。 另外一个文本文档,什么都分隔符都没有,就是按固定长度来放字段的,去的的时候 我只要去获取每一行的第几个字段到到第几个字符,这个又要怎么做。(比如字段A是 第一个字符到第3个字符; 字段B是第4个到第5个字符;字段N是 第N到N+3个字符)看了2天的文档确实理解不到 关于调用FORMATFILE这个的头绪,能来个达人讲讲到底 从MSSQL 的EXEC命令传入之后,到最后导入了表这个过程中,系统到底做了什么啊。
最近刚接触过找个,有些疑问想请教大家:
1.关于formatfile到底是应该是个什么样子的格式,里面的内容到底是个什么样的。
2.我目前需要做的的 将一个文本文档A.TXT(里面不包括标题),以空格还是TALBE形式分隔开的的数据,一共51列。导入到数据库里面的表A里面去,找个表A里面一共有41个字段,和A.TXT里面的前面的41列是一一对应的。
3.我现在的问题就是 导入的时候一直出现截断字符串。一直很悲剧
提问我要如何就取前面的41列呢,另外就是字段分隔符是| 这个竖线。第二个问题就是。 另外一个文本文档,什么都分隔符都没有,就是按固定长度来放字段的,去的的时候 我只要去获取每一行的第几个字段到到第几个字符,这个又要怎么做。(比如字段A是 第一个字符到第3个字符; 字段B是第4个到第5个字符;字段N是 第N到N+3个字符)看了2天的文档确实理解不到 关于调用FORMATFILE这个的头绪,能来个达人讲讲到底 从MSSQL 的EXEC命令传入之后,到最后导入了表这个过程中,系统到底做了什么啊。
http://technet.microsoft.com/zh-cn/library/ms191485(SQL.90).aspx
BULK INSERT--可直接用
http://technet.microsoft.com/zh-cn/library/ms188365(SQL.90).aspx
参照
http://technet.microsoft.com/zh-cn/library/ms178129(SQL.90).aspx
第二个关于固定分隔长度的,我以前的帖子有。
指定将数据字段作为字符数据加载。
就是这个我看不明白呢,这个CHAR 我要怎么是让SQL知道我是要到第41列就完毕了呢
A|D|E|G|C|B|Z|Y
A|D|E|G|C|B|Z|Y
A|D|E|G|C|B|Z|Y
A|D|E|G|C|B|Z|Y
A|D|E|G|C|B|Z|Y
最后导入到数据库是:
F1 F2 F3 F4 F5
A B C D E
A B C D E
A B C D E
A B C D E
其余的列就不用了。
列的顺序是重新排列过的。
FROM 'C:\Test.txt'
WITH
(
FIELDTERMINATOR='|',
ROWTERMINATOR='/n',
DATAFILETYPE='char'
);
FROM 'c:\test.txt'
WITH (
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
) 那个 CHAR就是分隔符
A|D|E|G|C|B|Z|Y
A|D|E|G|C|B|Z|Y
A|D|E|G|C|B|Z|Y
A|D|E|G|C|B|Z|Yd:\format.fmt 内容9.0
8
1 SQLCHAR 0 10 "|" 1 F1 Chinese_PRC_CI_AS
2 SQLCHAR 0 10 "|" 4 F2 Chinese_PRC_CI_AS
3 SQLCHAR 0 10 "|" 5 F3 Chinese_PRC_CI_AS
4 SQLCHAR 0 10 "|" 0 F4 Chinese_PRC_CI_AS
5 SQLCHAR 0 10 "|" 3 F5 Chinese_PRC_CI_AS
6 SQLCHAR 0 10 "|" 2 F6 Chinese_PRC_CI_AS
7 SQLCHAR 0 10 "|" 0 F7 Chinese_PRC_CI_AS
8 SQLCHAR 0 10 "\r\n" 0 F8 Chinese_PRC_CI_AS脚本:
create table tb(F1 varchar(10),F2 varchar(10),F3 varchar(10),
F4 varchar(10),F5 varchar(10))
BULK INSERT tb FROM 'd:\test.txt' WITH(FORMATFILE='D:\format.fmt')SELECT * FROM tb/*
F1 F2 F3 F4 F5
---------- ---------- ---------- ---------- ----------
A B C D E
A B C D E
A B C D E
A B C D E
A B C D E(5 行受影响)
*/
然后下面的ROW这个是对应重新排列的顺序和字段名。
那么
1.用源数据表生成XML格式。
2.调整ROW里面的字段和NAME,和目标表中的字段格式一致。
3.调用BUIK导入到目标表。
我的怎么是这个错误呢
SQLState = 08001, NativeError = -1
Error = [Microsoft][SQL Server Native Client 10.0]SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].
SQLState = 08001, NativeError = -1
Error = [Microsoft][SQL Server Native Client 10.0]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is config
ured to allow remote connections. For more information see SQL Server Books Online.
SQLState = S1T00, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Login timeout expired
NULL
我把需要导入的数据直接IMPORT到数据库里面,然后系统生成了一个表,我想把这个表生成XML的格式,
然后提示:SQLSate=HY000.NativeError =0
Error=Microsoft sql server native client 10.0 sql Server xml
格式文件中的字段2的序号无效。
这个序号无效是指什么啊
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="5" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="6" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="7" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="8" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="9" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="10" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="150" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="11" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="150" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="12" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="150" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="13" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="150" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="14" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="15" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="16" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="17" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="18" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="19" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="20" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="50" COLLATION="Chinese_PRC_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="19" NAME="storecode" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="5" NAME="CnName" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="6" NAME="EnName" xsi:type="SQLVARYCHAR"/>
</ROW>
</BCPFORMAT>这个文档对不对呢 我这样修改好像还是不行
Line 79 in format file "d:\Program\format\SUP.xml": duplicate element id reference "25".