0

我在将 .xls 导入 SQL 时遇到问题。Excel 文件的列中的某些单元格包含超过 2000 个文本字符,因此在导入时我将nvarchar每列更改为 4000。导入有效,但一列将单元格截断为 255 个字符。我检查了一下,列是 nvarchar (4000, null) 但 SELECT MAX(LEN(column)) = 255,这很奇怪。我试图更改nvarchar为,varchar(4000)但这不被接受。消息是:

[来源信息]
表:`Sheet1$`
栏目:q1
列类型:VarChar
SSIS 类型:Unicode 字符串 [DT_WSTR]

[目的地信息]
表:[dbo].[Sheet1$]
栏目:q1
列类型:varchar
SSIS 类型:字符串 [DT_STR]

奇怪的是,一列具有源类型:LongText 和目标类型:nvarchar,默认情况下显示最大字符,并且在导入时,该特定列(超过 255 个字符)的一切都很好。对于所有其他列nvarcharnvarchar但即使更改为 4000 或 3000 个字符,也会在 255 处中断。

我尝试将 Excel 文件重新保存为 .csv 格式,但 SQL 显示正在执行(错误):

任务 1:数据转换失败。“第 13 列”列的数据转换返回状态值 4 和状态文本“文本被截断或一个或多个字符在目标代码页中不匹配

任务 1:“输出列“列 13”(62)”由于发生截断而失败,并且“输出列“列 13”(62)”上的截断行处置指定截断失败。指定组件的指定对象发生截断错误。

任务 1:处理文件时出错

当管道引擎调用 PrimeOutput() 时,组件返回了失败代码。失败代码的含义由组件定义,但错误是致命的并且管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息

我不能要求客户重新导入数据并将其保存为 .csv 格式。

是否可以以 SQL 可接受的方式格式化 Excel 版本,例如源类型:LongText 和目标类型:nvarchar?(我不知道为什么varchar对我不起作用)

我已经为 Excel 使用了简单的任务,例如将单元格更改为文本或将一列复制粘贴为文本格式。

4

2 回答 2

0

请参考修复

您需要在连接字符串或注册表设置中指定扫描行设置。

于 2014-01-01T09:04:23.997 回答
0

When the import tries to decide what the the column types are in the Excel file it only looks in the 8 first rows. If there are no texts longer than 255 characters then the column is marked as VarChar otherwise as LongText (or a numeric type if that is more suitable).

There are two workarounds:

  1. Put a long text in the top 8 rows in the column you want to be LongText.

  2. Change the registry setting for how many rows should be probed before column type is decided (TypeGuessRows).

To change the value of TypeGuessRows, use these steps:

On the Start menu, click Run.
In the Run dialog box, type Regedt32, and then click OK.

Open the following key in the Registry editor: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
Note For 64-bit systems, the corresponding key is as follows: HKLM\SOFTWARE\wow6432node\microsoft\jet\4.0\engines\excel

Double-click TypeGuessRows.
In the DWORD editor dialog box, click Decimal under Base.
Type a value between 0 and 16, inclusive, for Value data.
Click OK, and then exit the Registry Editor.

Source: Microsoft

于 2017-05-18T15:08:48.727 回答