Sql server 使用文本文件大容量插入创建表,该文件位于选项卡中

Sql server 使用文本文件大容量插入创建表,该文件位于选项卡中,sql-server,Sql Server,我试图在SQLServer中使用大容量插入从文本文件创建一个表,但我一直得到大容量加载数据转换错误截断。我做错什么了吗?顶部是文本中的数据,下面是代码 Medication List NDC Code Brand Name Generic Product Name Route Description Drug ID Drug Name Package Size Unit Dose Form MED Conversion Factor

我试图在SQLServer中使用大容量插入从文本文件创建一个表,但我一直得到大容量加载数据转换错误截断。我做错什么了吗?顶部是文本中的数据,下面是代码

    Medication List NDC Code    Brand Name  Generic Product Name    Route   Description Drug ID Drug Name   Package Size    Unit    Dose    Form    MED Conversion Factor       
5-ARI Medications   00054039513 Dutasteride dutasteride 0.5 mg oral capsule oral    5-ARI Medications   d04788  N/A N/A N/A N/A N/A N/A     
5-ARI Medications   00054039522 Dutasteride dutasteride 0.5 mg oral capsule oral    5-ARI Medications   d04788  N/A N/A N/A N/A N/A N/A 


CREATE TABLE [MHS].[DBO].[NDC_DIRECTORY]
(
[MEDICATION_LIST] [VARCHAR](50) NULL,
[NDC_CODE] [VARCHAR](11) NOT NULL,
[BRAND_NAME] [VARCHAR](50) NULL,
[GENERIC_PRODUCT_NAME] [VARCHAR](MAX) NULL,
[ROUTE] [VARCHAR] (20) NULL,
[DESCRIPTION] [VARCHAR](50) NULL,
[DRUG_ID] [VARCHAR] (20) NULL,
[DRUG_NAME] [VARCHAR](50) NULL,
[PACKAGE_SIZE] [VARCHAR] (20) NULL,
[UNIT] [VARCHAR] (10) NULL,
[DOSE] [VARCHAR] (10) NULL,
[FORM] [VARCHAR] (20) NULL,
[MED_CONVERSION_FACTOR] [VARCHAR] (10) NULL

) ON [PRIMARY];



BULK INSERT MHS.DBO.NDC_DIRECTORY FROM 'C:\SQL\NDC_Directory.txt' 
        WITH (
              FIRSTROW = 2,
              FIELDTERMINATOR = '\t',
              ROWTERMINATOR = '\n'
             );

@sm84请检查NDC_目录表中的列数与NDC_DIRECTORY.txt文件中的列数。NDC_目录表总共有13列。而NDC_Directory.txt文件共有12列

使用提供的文本文件运行大容量插入时,确实会导致以下错误:

Msg 4863,16级,状态1,第1行批量加载数据转换错误 第2行第12列表格的截断

当我向NDC_Directory.txt添加一列额外的数据时,大容量插入成功完成

2行受影响 完成时间:2020-02-21T20:05:15.1860762-06:00


很难从提供的示例文本输入中分辨出选项卡字段分隔符。我的假设是,“杜他司特列德0.5 mg口服胶囊口服”是“通用产品名称”属性的一部分。

当您使用ROWTERMINATOR=0x0a时是否运气更好?@HoneyBadger我仍然收到相同的消息。遗憾的是,这是一个不可能的结果。请发布准确的错误消息。它可能会告诉您有问题的行号。您可以在文件中有一行或多行,其中一些字段太大,无法插入。这就是截断的意思。您必须确保文件确实有Linux行结尾\n。常规Windows文件将CRLF作为回车符,即\r\n。不用说,字段之间应该用制表符隔开。如果您碰巧有一个固定长度的CSV文件,则字段之间将用一个或多个空格分隔。然后您可能需要一个格式化文件。我建议您将所有列扩展到VARCHAR8000,尝试导入该文件。如果成功,您可以查看导入的数据并找到每个字段的最大长度。如果出现相同的截断错误,则可能存在分隔符不一致的问题。谢谢。格式化的最佳方式是什么?我是否应该通过文本文件检查每一行,看看是否有一个问题在一行中。有两种方法需要考虑。通常,通过降低导入文件的复杂性来缩小问题的范围。建议尝试通过最初只使用带有列名的标题行和一行数据来成功导入一行。如果不起作用,请尝试用数据行中的分隔列数确认标题行中的列数。我在每行的末尾添加了一个虚构的列,导入成功。希望有帮助!