繁体   English   中英

第 1 行第 1 列 (ID) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)

[英]Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 1, column 1 (ID)

当我尝试将文本文件导入我的数据库时出现转换错误。 以下是我收到的错误消息:

消息 4864,级别 16,状态 1,第 1 行,第 1 行,第 1 列 (ID) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

消息 4864,级别 16,状态 1,第 1 行,第 2 行第 1 列 (ID) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

消息 4864,级别 16,状态 1,第 1 行,第 3 行第 1 列 (ID) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

消息 4864,级别 16,状态 1,第 1 行,第 4 行第 1 列 (ID) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

消息 4864,级别 16,状态 1,第 1 行,第 5 行第 2 列(日期)的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

消息 4864,级别 16,状态 1,第 1 行,第 6 行第 1 列 (ID) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

消息 4864,级别 16,状态 1,第 1 行,第 7 行第 1 列 (ID) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

消息 4864,级别 16,状态 1,第 1 行,第 8 行第 1 列 (ID) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

消息 4864,级别 16,状态 1,第 1 行,第 9 行第 1 列 (ID) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

消息 4864,级别 16,状态 1,第 1 行,第 10 行第 1 列 (ID) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。

这是我的表查询代码:

CREATE TABLE [dbo].[testpostingvoucher](
    [ID] [int] NULL,
    [date] [date] NULL,
    [checkdigit] [varchar](max) NULL,
    [credit] [int] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

这是我的批量插入查询代码:

bulk insert [dbo].[testpostingvoucher]
from 'D:\HBL Scrolls\testbulk.txt'
with
    (
        fieldterminator = '|',
        rowterminator = '.00|'
    )
go

这是来自文本文件的示例数据:

YOUR ACCOUNT STATEMENT                                             ACCOUNT NO    : 0042-79000275-03 OF
   FOR THE PERIOD ENDING: FEB01,2020 TO JUN30,2020                                    STATE LIFE, KARACHI BRANCH
   CDGK-MAIN COLLECTION A/C                                           ACCOUNT TYPE  : NON-CHEQUEING A/C.
   CMD HBL STATE LIFE CORPORATE CENTRE                                CURRENCY      : Pakistan Rupee
   STATE LIFE BUILDING NO-9                                           PRINTING DATE :  3-11-20
   ZIA UDDIN AHMED ROAD                                               FREQUENCY     : INTERIM / DUPLICATE
   KARACHI                                                            PAGE NO       :    1

                                                              

    USER          : HJ6201
   -----------------------------------------------------------------------------------------------------------------
   |DATE   |VALUE  |PARTICULARS                        |             DEBIT|            CREDIT|             BALANCE |
   
|-------|-------|-----------------------------------|------------------|------------------|---------------------|
   |       |       |BROUGHT FORWARD                    |                  |                  |                 .00 |
   |01FEB20|       |CMD CREDIT        0067031010700068 |                  |          2,042.00|            2,042.00 |
   |       |       |14C.D.G.KC012386O00001             |                  |                  |                     |
   |       |       |2386                               |                  |                  |                     |

似乎某些值正试图插入不接受该值的列中。 因此,在需要 INT 的 ID 列中,值中可能还有另一个字符。 您可以尝试使每一列成为NVARCHAR(max) ,加载所有数据,然后使用isnumberic()查询并查看不是 INT 的列中的内容。

CREATE TABLE [dbo].[testpostingvoucher]( [ID] NVARCHAR(MAX) NULL, [date] NVARCHAR(MAX) NULL, [checkdigit] varchar NULL, [credit] NVARCHAR(MAX) NULL -- 可能想使用 DECIMAL( 18,2) 而不是 INT ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO

那个行终止符对我来说看起来很奇怪。

BULK INSERT testpostingvoucher
FROM 'E:\\file.txt' --location with filename
WITH
(
   FIELDTERMINATOR = '\t',
   ROWTERMINATOR = '\n'
)
GO

您的数据实际上从哪一行开始? 有一个可选参数来选择 FIRSTROW。

TRUNCATE TABLE testpostingvoucher

BULK INSERT testpostingvoucher
FROM 'E:\ETLFiles\tsp1.txt'
WITH (
      FIELDTERMINATOR = '\t',
     ROWTERMINATOR = '\n',
     FIRSTROW=15
)

SELECT *
FROM testpostingvoucher

有关更多想法,请参阅下面的链接。

https://www.mssqltips.com/sqlservertip/5345/nonstandard-delimiters-for-columns-and-rows-using-sql-server-bulk-insert/

https://www.mssqltips.com/sqlservertip/6041/sql-server-staging-table-vs-temp-table/

您可以将要插入的表中的所有数据类型(临时表)设置为 varchar(max),加载数据,然后将所有内容复制到最终的强类型表(生产表)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM