我参与了一个数据迁移项目。当我尝试将一个表中的数据插入另一个表(SQL Server 2005)时,出现以下错误:
消息8152,级别16,州13,第1行
字符串或二进制数据将被截断。
源数据列与数据类型匹配,并且在目标表列的长度定义范围内,因此我不知道是什么导致了这个错误。
发布于 2011-06-18 00:30:30
您需要发布源表和目标表的表定义,以便我们找出问题所在,但底线是源表中的某一列大于目标列。这可能是因为您正在以一种您没有意识到的方式更改格式。您要迁移的数据库模型在弄清楚这一点方面也很重要。
发布于 2015-02-22 05:27:48
正如其他人已经说过的,源表中的某个列数据类型大于目标列。
一个简单的解决方案是简单地关闭警告并允许发生截断。所以,如果你收到这个错误,但是你确定你的旧数据库/表中的数据被截断(裁剪成一定大小)是可以接受的,你可以简单地执行以下操作;
SET ANSI_WARNINGS OFF;
-- Your insert TSQL here.
SET ANSI_WARNINGS ON;
如上所述,始终记得在之后再次打开警告。我希望这能帮到你。
发布于 2011-06-18 00:39:14
问题非常简单:源查询中的一个或多个列包含的数据超过了其目标列的长度。一个简单的解决方案是获取源查询并对每一列执行Max(Len( source col ))
。也就是说,
Select Max(Len(TextCol1))
, Max(Len(TextCol2))
, Max(Len(TextCol3))
, ...
From ...
然后将这些长度与目标表中的数据类型长度进行比较。至少有一个超过其目标列长度。
如果您绝对肯定不应该出现这种情况,并且不关心是否出现这种情况,那么另一种解决方案是将源查询列强制转换为它们的目标长度(这将截断任何过长的数据):
Select Cast(TextCol1 As varchar(...))
, Cast(TextCol2 As varchar(...))
, Cast(TextCol3 As varchar(...))
, ...
From ...
https://stackoverflow.com/questions/6388756
复制相似问题