猿问

SQL Server字符串或二进制数据将被截断

我参与了一个数据迁移项目。当我尝试将数据从一个表插入到另一个表(SQL Server 2005)时,出现以下错误:


消息8152,级别16,状态13,行1 

字符串或二进制数据将被截断。


源数据列与数据类型匹配,并且在目标表列的长度定义之内,因此我对可能导致此错误的原因一无所知。


婷婷同学_
浏览 3214回答 3
3回答

慕的地8271018

您将需要发布源表和目标表的表定义,以便我们找出问题所在,但最重要的是,源表中的一列大于目标列。可能是以您不知道的方式更改格式。您正在使用的数据库模型对于弄清这一点也很重要。

慕沐林林

正如其他人已经说过的那样,源表中的列数据类型之一比目标列大。一个简单的解决方案是简单地关闭警告并允许截断发生。因此,如果您收到此错误,但是您确定将旧数据库/表中的数据截断(按比例缩放)是可以接受的,则只需执行以下操作即可;SET ANSI_WARNINGS  OFF;-- Your insert TSQL here.SET ANSI_WARNINGS ON;如上所述,请始终记住随后再次打开警告。我希望这有帮助。

慕哥9229398

问题很简单:源查询中的一个或多个列包含的数据超出了其目标列的长度。一个简单的解决方案是采用源查询并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 ...
随时随地看视频慕课网APP

相关分类

SQL Server
我要回答