SQL Server:截断错误,目标数据类型中的字符空间很大

SQL Server:截断错误,目标数据类型中的字符空间很大,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我正在尝试从SQL Server 2008 R2中的select语句执行insert。目标列的数据类型为char(7),我已验证源列的len()和datalength()长度不超过6 我收到截断错误: Msg 8152,第16级,第14状态,第219行 字符串或二进制数据将被截断 我已经使用temp表验证了插入char(9)列是否有效,但不幸的是,目标数据库不支持数据类型更改 更新:我能够根据需要执行插入操作,方法是在所讨论的select语句中添加一个DISTINCT子句,但是行数保持不变。所以

我正在尝试从SQL Server 2008 R2中的
select
语句执行
insert
。目标列的数据类型为
char(7)
,我已验证源列的
len()
datalength()
长度不超过6

我收到截断错误:

Msg 8152,第16级,第14状态,第219行
字符串或二进制数据将被截断

我已经使用temp表验证了插入
char(9)
列是否有效,但不幸的是,目标数据库不支持数据类型更改


更新:我能够根据需要执行插入操作,方法是在所讨论的select语句中添加一个DISTINCT子句,但是行数保持不变。所以,我想重新格式化的问题是,为什么即使数据相同,添加distinct子句也不会返回错误消息?谢谢

您使用的是什么字符集?某些字符集具有占用两个字节的字符。但是,长度函数仍将它们计为1

我同意比尔和大卫的观点。但是,如果源代码中的大多数字符都是多字节的(有些字符甚至占3字节),那么您可能需要使用类似varchar(50)的内容,以确保字段足够大,以避免截断错误。

如果字段将采用变长字符串,请尝试使用varchar(7)SQL\u Latin1\u General\u CP1\u CI\u AS,我相信datalength()也会返回字节详细信息,谢谢!不过,我也同意;“…目标数据库将不支持数据类型更改。”如果您提供DDL和SQL,我将很乐意尝试在我的服务器上复制大小写。源和目标字符集是否相同?您使用的是数据迁移还是ETL工具?目标表上有触发器吗?如果导出源和目标结果集,它们是否相同?