【发布时间】:2018-02-26 22:20:15
【问题描述】:
我正在尝试将数据批量导入 ms-sql 2016,但是由于 2 字节长度的字符(如 Ü、Ä 等),我遇到了问题:
包装字段
来源是带有特殊(宽)字符的固定长度、unicode (utf-8) 文本文件:
这是文件的示例部分:
ABS525 0128211024200
ABS526 0128211024200
ABS527 0128211024200
ABS528 0128211024200
ABS529 0128211024200
Ölrücklaufleitung 0128211037390
Ölzu- und Ölrücklaufle0128211037390
Ölzulaufleitung 0128211037390
字段长度为:22 - 4 - 3 - 5 - 1
我尝试了各种方法: - Management Studio 中的导入向导, - SSDT 导入, - 批量进口, - 开放行集, - bcp 命令行 没有任何作用,实际上,除非行中有特殊字符,否则它们会起作用。
这是我的批量插入代码:
BULK INSERT [tecdoc2].[dbo].[211]
FROM 'C:\Users\Administrator\Desktop\D_TAF24\211yeni.0128'
WITH (MAXERRORS=50, CODEPAGE = '65001', DATAFILETYPE = 'widechar', FORMATFILE = 'C:\Users\Administrator\Desktop\BCP_Formats\a211.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="CharFixed" LENGTH="22" />
<FIELD ID="2" xsi:type="CharFixed" LENGTH="4" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharFixed" LENGTH="3" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="4" xsi:type="CharFixed" LENGTH="5" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="5" xsi:type="CharFixed" LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="6" xsi:type="CharTerm" TERMINATOR="\r\n" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="ArtNr" xsi:type="SQLNVARCHAR" LENGTH="22" />
<COLUMN SOURCE="2" NAME="DLNr" xsi:type="SQLNCHAR" />
<COLUMN SOURCE="3" NAME="SA" xsi:type="SQLNCHAR" />
<COLUMN SOURCE="4" NAME="GenArtNr" xsi:type="SQLNCHAR" />
<COLUMN SOURCE="5" NAME="Losch-Flag" xsi:type="SQLNCHAR" />
</ROW>
</BCPFORMAT>
sql中的所有字段都是nvarchar(指定长度,其实我这里做了很多试验:把指定长度加倍,或者'max'等)
你有什么建议吗?我会很感激的。
致以诚挚的问候, 穆拉特
【问题讨论】:
-
检查 this tutorial 将代码页设置为 65001 并然后验证文本列是否作为 DT_WSTR 导入。
-
您好 Panagiotis,非常感谢您的建议。实际上,在发布我的问题之前,我已经看过/阅读了您提到的文章。这是一种间接的方式,需要使用 gui。我有 100 多个包含 1000 多个字段的表。我在excel中有所有的字段结构。因此,如果可以通过批量导入、openrowset 等方式实现的话;我会非常快速地创建必要的代码和格式文件。
标签: sql-server unicode utf-8