首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL Server字符串或二进制数据将被截断

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

Stack Overflow用户
提问于 2011-06-18 00:24:34
回答 20查看 622.9K关注 0票数 197

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

消息8152,级别16,州13,第1行

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

源数据列与数据类型匹配,并且在目标表列的长度定义范围内,因此我不知道是什么导致了这个错误。

EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2011-06-18 00:30:30

您需要发布源表和目标表的表定义,以便我们找出问题所在,但底线是源表中的某一列大于目标列。这可能是因为您正在以一种您没有意识到的方式更改格式。您要迁移的数据库模型在弄清楚这一点方面也很重要。

票数 229
EN

Stack Overflow用户

发布于 2015-02-22 05:27:48

正如其他人已经说过的,源表中的某个列数据类型大于目标列。

一个简单的解决方案是简单地关闭警告并允许发生截断。所以,如果你收到这个错误,但是你确定你的旧数据库/表中的数据被截断(裁剪成一定大小)是可以接受的,你可以简单地执行以下操作;

代码语言:javascript
运行
复制
SET ANSI_WARNINGS OFF;
-- Your insert TSQL here.
SET ANSI_WARNINGS ON;

如上所述,始终记得在之后再次打开警告。我希望这能帮到你。

票数 119
EN

Stack Overflow用户

发布于 2011-06-18 00:39:14

问题非常简单:源查询中的一个或多个列包含的数据超过了其目标列的长度。一个简单的解决方案是获取源查询并对每一列执行Max(Len( source col ))。也就是说,

代码语言:javascript
运行
复制
Select Max(Len(TextCol1))
    , Max(Len(TextCol2))
    , Max(Len(TextCol3))
    , ...
From ...

然后将这些长度与目标表中的数据类型长度进行比较。至少有一个超过其目标列长度。

如果您绝对肯定不应该出现这种情况,并且不关心是否出现这种情况,那么另一种解决方案是将源查询列强制转换为它们的目标长度(这将截断任何过长的数据):

代码语言:javascript
运行
复制
Select Cast(TextCol1 As varchar(...))
    , Cast(TextCol2 As varchar(...))
    , Cast(TextCol3 As varchar(...))
    , ...
From ...
票数 66
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6388756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档