Database 使用格式化文件进行大容量插入
我的名为“dictionary”的数据库有两列,分别为“column1”和“column2”。两者都可以接受空值。两列的数据类型都是INT。现在我只想使用bcp从文本文件插入第2列。我制作了一个格式化文件。我的格式文件是这样的Database 使用格式化文件进行大容量插入,database,sql-server-2008,bulkinsert,bcp,Database,Sql Server 2008,Bulkinsert,Bcp,我的名为“dictionary”的数据库有两列,分别为“column1”和“column2”。两者都可以接受空值。两列的数据类型都是INT。现在我只想使用bcp从文本文件插入第2列。我制作了一个格式化文件。我的格式文件是这样的 <?xml version="1.0"?> <BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3
<?xml version="1.0"?>
<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="7"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="24"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="column2" xsi:type="SQLINT"/>
</ROW>
</BCPFORMAT>
但它不起作用?我怎样才能解决这个问题
N:B:
我的txt文件看起来像
123
456
4101
编辑了另一个问题:
我可以用这种技术填充一列,但当我像以前一样从第一行填充文本文件中的另一列时。我该怎么做呢?假设您的格式文件是正确的,我相信您需要从批量插入中删除FIELDTERMINATOR和ROWTERMINATOR 批量插入字典 来自“C:\Users\jka\Desktop\n.txt” WITH FORMATFILE='path to my format file.xml' 还要确保: 输入文件的编码正确。在您的情况下,最有可能的是ANSI,而不是UTF-8或Unicode。 行终止符是格式文件中的第二个字段终止符,实际上是\r\n而不是\n。 更新,因为您需要跳过第一列: 对于XML格式的文件,当您使用大容量INSERT语句直接导入到表中时,无法跳过列。为了达到预期的效果,并且仍然使用XML格式的文件,您需要使用OPENROWSETBULK。。。并在选择列表和目标表中提供列的显式列表 因此,要仅将数据插入第2列,请使用: 插入到dictionarycolumn2中 选择第2列 从OPENROWSETBULK'C:\temp\infile1.txt', FORMATFILE='C:\temp\bulkfmt.xml'作为t1; 如果您的数据文件只有一个字段,那么您的格式文件可以如下所示
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="C1" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="24"/>
</RECORD>
<ROW>
<COLUMN SOURCE="C1" NAME="column2" xsi:type="SQLINT"/>
</ROW>
</BCPFORMAT>
数据文件包含一个字段,因此格式文件应反映该字段
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\r\n"/>
</RECORD>
我没有看到任何VisualStudio或CI假设dictionary是表名而不是数据库名。对吗?是的,Dictionars是表的名称@peterm可能是我的格式文件中的某个错误。但我不明白。@peterm请确保输入文件的编码是正确的。在您的情况下,最有可能的是ANSI,而不是UTF-8或Unicode。行终止符是格式文件中的第二个字段终止符,实际上是\r\n而不是\n。你的格式文件对我来说很好。但是之后,当我想用同样的技术从另一个文本文件中填充这个空值[在第2列]时,它就不起作用了??我该怎么做?@peterm要用另一个文件中的数据更新空值,你需要一种方法将表中的记录与第二个文件中的行关联起来。如果第一个文件和第二个文件中的行数相同,则可以在字典文件中使用标识列,使用标识列将第二个文件导入临时表,连接两个表,并使用临时表中的值更新字典表。最后删除临时表。最好在批量插入之前使用Excel合并这两个文件。这样你就不会有这些问题了。我可以用这种技术填充一列,但是当我像以前一样从第一行填充文本文件中的另一列时。我该怎么做???你为什么问用户2029069和伊蒙一样的问题?这是个错误。那么,你能帮我解决这个问题吗???@Philip如果你有两个独立的文件,每个文件中的项目数量大概相同,请将它们批量插入两个表中,这两个表都有标识列。然后通过连接生成的ID将两个表合并为一个表。
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\r\n"/>
</RECORD>