第 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) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。
这是我的table查询代码:
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 的内容
创建 TABLE [dbo].[testpostingvoucher](
[ID] NVARCHAR(MAX) NULL,
[日期] NVARCHAR(MAX) NULL,
[校验位] varchar NULL,
[credit] NVARCHAR(MAX) NULL——可能想使用 DECIMAL(18,2) 而不是 INT
) 在 [主要] TEXTIMAGE_ON [主要]
去
我觉得那个行终止符很奇怪。
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/6041/sql-server-staging-table-vs-temp-table/
您可以将要插入的 table 中的所有数据类型设置为(暂存 table),设置为 varchar(max),加载数据,然后将所有内容复制到最终文件, 强类型 table (生产 table).
我在尝试将文本文件导入数据库时遇到转换错误。以下是我收到的错误消息:
消息 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) 的批量加载数据转换错误(指定代码页的类型不匹配或无效字符)。
这是我的table查询代码:
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()
.
创建 TABLE [dbo].[testpostingvoucher]( [ID] NVARCHAR(MAX) NULL, [日期] NVARCHAR(MAX) NULL, [校验位] varchar NULL, [credit] NVARCHAR(MAX) NULL——可能想使用 DECIMAL(18,2) 而不是 INT ) 在 [主要] TEXTIMAGE_ON [主要] 去
我觉得那个行终止符很奇怪。
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/6041/sql-server-staging-table-vs-temp-table/
您可以将要插入的 table 中的所有数据类型设置为(暂存 table),设置为 varchar(max),加载数据,然后将所有内容复制到最终文件, 强类型 table (生产 table).