如何克服截断错误?

时间:2018-07-05 20:33:23

标签: sql-server sql-server-2008

我正在尝试使用导入和导出向导将小的数据集从CSV文件移动到现有(空)表中。我做了“脚本表为”>“创建为”,以获取该表的所有DML。我知道引起问题的两个字段的字段类型是varchar(50)。我收到此错误消息:

Error 0xc020902a: Data Flow Task 1: The "Source - Reconciliation_dbo_agg_boc_consolidated_csv.Outputs[Flat File Source Output].Columns["ReportScope"]" failed because truncation occurred, and the truncation row disposition on "Source - Reconciliation_dbo_agg_boc_consolidated_csv.Outputs[Flat File Source Output].Columns["ReportScope"]" specifies failure on truncation. A truncation error occurred on the specified object of the specified component.
 (SQL Server Import and Export Wizard)

所有字符的最大长度为49,所以我不确定为什么SQL Server抱怨截断。有什么方法可以禁用此错误检查,而只是强制它起作用?它应该按原样工作!谢谢大家。

3 个答案:

答案 0 :(得分:0)

  

有什么办法可以禁用此错误检查,而只是强制它   工作?它应该按原样工作!谢谢大家。

是的。如果您使用的是向导,则可以在运行表架构之前先查看它,然后选中忽略截断的选项。

答案 1 :(得分:0)

  

所有字符的最大长度为49,所以我不确定为什么使用SQL Server   在抱怨截断。

使用导入向导时,源列的默认数据类型可能为Text,因此请使用源的高级选项卡将其更改为varchar(50)。检查此link以获得更多详细信息。

答案 2 :(得分:0)

为了安全起见,请检查“源”和“目标”中的列数据类型。如果两者都不相同,则只需在表中将所有列声明为具有最大长度的varchar,例如说varchar(max)或varchar(500),然后看看结果如何。

更改Varchar列的最大长度:

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

然后,即使该列最初定义为NOT NULL,该列也将默认为允许空值。即省略ALTER TABLE中的规范... ALTER COLUMN始终被视为。

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NULL;

根据需要检查列可为空或不为空,只需对其进行更改。

使用以下步骤更好地了解如何使用SQL Server Management Studio将 CSV文件导入数据库:

虽然SQL Server上不提供批量复制和其他批量导入选项,但是您可以使用SQL Server Management Studio将CSV格式的文件导入数据库。

首先,在数据库中创建一个表,要将CSV文件导入其中。创建表后:

  • 使用SQL Server Management Studio登录到数据库。

  • 右键单击数据库,然后选择任务->导入数据...

  • 单击下一步>按钮。

  • 对于数据源,选择“平面文件源”。然后使用浏览按钮选择CSV文件。在单击下一步>按钮之前,请花一些时间配置数据导入。

  • 对于Destination,请选择正确的数据库提供程序(例如对于SQL Server 2012,您可以使用SQL Server Native Client 11.0)。输入服务器名称;选中使用SQL Server身份验证,输入用户名,密码和数据库,然后单击下一步>按钮。

  • 在“选择源表和视图”窗口中,可以在单击“下一步>”按钮之前编辑映射。

  • 选中立即运行,然后单击下一步>按钮。

  • 单击“完成”按钮以运行程序包。