【发布时间】:2015-10-29 09:10:00
【问题描述】:
我在一个由“|”分隔的文本文件中有以下几行。我只想检索姓氏和名字并将其写入表中。
Released_Date|Label|Type|Id|FormId|Title|Surname|First_Name|Middle_Name
25/07/2014|XCS|CDE|V000011|F000011|Miss|Dālwó|Cabĉver|Ann
25/07/2014|XCS|CDE|V000011|F000011|Miss|Rtyālwó|sabĉper|Joanne
我创建了 XML 文件来仅检索姓氏和名字:
<?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="\n"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\n"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="Surname"/>
<COLUMN SOURCE="2" NAME="First_Name"/>
</ROW>
</BCPFORMAT>
我创建了存储过程来读取它:
ALTER PROC dbo.ImportTextFile
AS
BULK INSERT test FROM 'C:\Program Files\Data Import.txt'
WITH
(
FIELDTERMINATOR ='|',
ROWTERMINATOR ='\n',
FIRSTROW =2,
FORMATFILE = 'C:\Program Files\cabcolumns.xml'
);
没有错误,但问题是文本文件中的整行被插入到表的两列中,但我只想要姓氏和名字。我不确定我做错了什么。我还给出了下表的 DDL。请帮忙。
CREATE TABLE [dbo].[test](
[Surname] [nvarchar](4000) COLLATE SQL_Latin1_General_CP1253_CI_AI NULL,
[First_Name] [nvarchar](4000) COLLATE SQL_Latin1_General_CP1253_CI_AI NULL
) ON [PRIMARY]
【问题讨论】:
-
对于您将
\n设置为终止符的 XML 中的两个字段。也许这就是罪魁祸首?如果终止符是换行符,那么整行就是字段的内容。 -
@Paolo 我尝试使用“|”作为终止符,但它给出了错误“在数据文件中遇到了意外的文件结尾”
标签: sql-server xml stored-procedures text-files bulkinsert