当我试图将文本文件导入我的数据库时,我会得到转换错误。下面是我收到的错误消息:
Msg 4864,级别16,State 1,行1大容量加载数据转换错误(指定代码页的类型错配或无效字符),第1行,第1列(ID)。
Msg 4864、级别16、状态1、第1行大容量加载数据转换错误(指定代码页的类型错配或无效字符),第2行,第1列(ID)。
Msg 4864、级别16、状态1、第1行大容量加载数据转换错误(指定代码页的类型错配或无效字符),第3行,第1列(ID)。
Msg 4864、级别16、状态1、第1行大容量加载数据转换错误(指定代码页的类型错配或无效字符),第4行,第1列(ID)。
Msg 4864,级别16,状态1,第1行大容量加载数据转换错误(指定代码页的类型错配或无效字符),第5行,第2列(日期)。
Msg 4864、级别16、状态1、第1行大容量数据转换错误(指定代码页的类型错配或无效字符),用于第6行,第1列(ID)。
Msg 4864、级别16、状态1、第1行大容量加载数据转换错误(指定代码页的类型错配或无效字符)第7行第1列(ID)。
Msg 4864,级别16,状态1,第1行,大容量加载数据转换错误(指定代码页的类型错配或无效字符)第8行,第1列(ID)。
Msg 4864、级别16、状态1、第1行大容量加载数据转换错误(指定代码页的类型错配或无效字符)第9行第1列(ID)。
Msg 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 | | | |发布于 2020-11-22 15:56:20
似乎有些值正在尝试插入到不接受该值的列中。因此,在ID列(需要和INT )中,值中可能包含另一个字符。您可以尝试将每一列设置为NVARCHAR(max),加载所有数据,然后使用isnumberic()查询并查看列中哪些不是INT。
在主testpostingvoucher主GO上创建表dbo.testpostingvoucher
发布于 2021-02-10 05:43:19
那排终结者在我看来很奇怪。
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/
您可以将要插入的表中的所有数据类型设置为(暂存表)、varchar(max)、加载数据,然后将所有内容复制到最终的强类型表(生产表)。
https://stackoverflow.com/questions/64952131
复制相似问题