Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将分号分隔的文本文件导入SQL Server_Sql_Sql Server_Xml_Import_Bcp - Fatal编程技术网

如何将分号分隔的文本文件导入SQL Server

如何将分号分隔的文本文件导入SQL Server,sql,sql-server,xml,import,bcp,Sql,Sql Server,Xml,Import,Bcp,我正在尝试将分号分隔的文件导入SQL Server。我使用bcp尝试创建一个XML文件,但出现了错误 文本文件(数据)如下所示: customer_id;remed_date;assumed_closed;exempt_ind;refresh_date;Target_date;due_date 2;06/06/2015;True;False;06/13/2015;06/13/2020; 3;08/02/2014;False;False;;08/02/2019; <?xml version

我正在尝试将分号分隔的文件导入SQL Server。我使用bcp尝试创建一个XML文件,但出现了错误

文本文件(数据)如下所示:

customer_id;remed_date;assumed_closed;exempt_ind;refresh_date;Target_date;due_date
2;06/06/2015;True;False;06/13/2015;06/13/2020;
3;08/02/2014;False;False;;08/02/2019;
<?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="12"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="11"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="1"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="1"/>
  <FIELD ID="5" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="11"/>
  <FIELD ID="6" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="11"/>
  <FIELD ID="7" xsi:type="CharTerm" TERMINATOR="0x0A" MAX_LENGTH="11"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="Customer_ID" xsi:type="SQLINT"/>
  <COLUMN SOURCE="2" NAME="Remed_Date" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="Assumed_Closed" xsi:type="SQLBIT"/>
  <COLUMN SOURCE="4" NAME="Exempt_Ind" xsi:type="SQLBIT"/>
  <COLUMN SOURCE="5" NAME="Refresh_Date" xsi:type="SQLDATE"/>
  <COLUMN SOURCE="6" NAME="Target_Date" xsi:type="SQLDATE"/>
  <COLUMN SOURCE="7" NAME="Due_Date" xsi:type="SQLDATE"/>
 </ROW>
</BCPFORMAT>
[ODS_Customer_ID] [int] NOT NULL,
[Remed_Date] [date] NOT NULL,
[Assumed_Closed] [bit] NOT NULL,
[Exempt_Ind] [bit] NOT NULL,
[Refresh_Date] [date] NOT NULL,
[Target_Date] [date] 
[Due_Date] [date] 
XML文件如下所示:

customer_id;remed_date;assumed_closed;exempt_ind;refresh_date;Target_date;due_date
2;06/06/2015;True;False;06/13/2015;06/13/2020;
3;08/02/2014;False;False;;08/02/2019;
<?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="12"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="11"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="1"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="1"/>
  <FIELD ID="5" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="11"/>
  <FIELD ID="6" xsi:type="CharTerm" TERMINATOR=";" MAX_LENGTH="11"/>
  <FIELD ID="7" xsi:type="CharTerm" TERMINATOR="0x0A" MAX_LENGTH="11"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="Customer_ID" xsi:type="SQLINT"/>
  <COLUMN SOURCE="2" NAME="Remed_Date" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="Assumed_Closed" xsi:type="SQLBIT"/>
  <COLUMN SOURCE="4" NAME="Exempt_Ind" xsi:type="SQLBIT"/>
  <COLUMN SOURCE="5" NAME="Refresh_Date" xsi:type="SQLDATE"/>
  <COLUMN SOURCE="6" NAME="Target_Date" xsi:type="SQLDATE"/>
  <COLUMN SOURCE="7" NAME="Due_Date" xsi:type="SQLDATE"/>
 </ROW>
</BCPFORMAT>
[ODS_Customer_ID] [int] NOT NULL,
[Remed_Date] [date] NOT NULL,
[Assumed_Closed] [bit] NOT NULL,
[Exempt_Ind] [bit] NOT NULL,
[Refresh_Date] [date] NOT NULL,
[Target_Date] [date] 
[Due_Date] [date] 
当我尝试运行批量插入时:

BULK INSERT MXB.dbo.RefreshSuppression
FROM '\\SRVR1\Data\MXB\Automated\BSA_AML_Suppression.txt'
(FORMATFILE = '\\SRVR1\Scripts\MXB\Weekly\MXBRefreshSupp.xml');
我得到这个错误:

Msg 4864, Level 16, State 1, Line 26
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 1, column 1 (ODS_Customer_ID).
Msg 4866, Level 16, State 8, Line 26
The bulk load failed. The column is too long in the data file for row 1, column 7. Verify that the field terminator and row terminator are specified correctly.
Msg 7399, Level 16, State 1, Line 26
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 26
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".

有什么想法吗?

您的数据只有六列。布尔值“export\u Ind”之后应该有三个日期,但我只计算了两个。

您的数据只有六列。布尔“export\u Ind”之后应该有三个日期,但我只计算了两个。

对于消息4864,您不需要将文件转换为XML来执行批量插入。尝试:

BULK INSERT MXB.dbo.RefreshSuppression
FROM '\\SRVR1\Data\MXB\Automated\BSA_AML_Suppression.txt'
WITH (
    FIELDTERMINATOR = ';',
    ROWTERMINATOR = '\n'
    )
GO
可以找到有关批量导入的更多选项

对于消息4866,您缺少文件中的第7列


消息7330和7399似乎与链接服务器相关,而不是与批量上载相关。您可以找到microsoft支持文章

对于message 4864,无需将文件转换为XML即可执行大容量插入。尝试:

BULK INSERT MXB.dbo.RefreshSuppression
FROM '\\SRVR1\Data\MXB\Automated\BSA_AML_Suppression.txt'
WITH (
    FIELDTERMINATOR = ';',
    ROWTERMINATOR = '\n'
    )
GO
可以找到有关批量导入的更多选项

对于消息4866,您缺少文件中的第7列


消息7330和7399似乎与链接服务器相关,而不是与批量上载相关。您可以找到microsoft为他们撰写的支持文章

在上载之前,是否有特定原因要将其转换为xml文件?这是我知道如何将其从分号分隔的文本文件上载到表的唯一方法。我必须从Access应用程序中自动化该过程;我使用VBA调用一些固定长度的文件,以调用包含与上述类似的批量导入命令的SQL文件。在上载之前,是否有特定原因要将其转换为xml文件?这是我知道如何将其从分号分隔的文本文件上载到表的唯一方法。我必须从Access应用程序中自动化该过程;我使用VBA调用一些固定长度的文件,调用一个SQL文件,该文件包含与上述类似的批量导入命令。嗯,Cliff…我想可能是您捕获了它…但后来我从XML文件中提取了最后一列,但我得到了相同的错误嗯,Cliff…我想可能是您捕获了它…但后来我从XML文件中提取了最后一列,但我也有同样的错误谢谢你的线索安德鲁,我会检查那些链接!这是一种真正的痛苦;我们的客户给我们的文件包含所有7个标题,但显然只有6列数据。我不知道第七列有时是否会被填充,所以我不能放弃它…啊!谢谢你的线索安德鲁,我会检查这些链接!这是一种真正的痛苦;我们的客户给我们的文件包含所有7个标题,但显然只有6列数据。我不知道第七列有时是否会被填充,所以我不能放弃它…啊!