Sql 二进制数据截断错误消息(Msg 8152)

Sql 二进制数据截断错误消息(Msg 8152),sql,sql-server,database,Sql,Sql Server,Database,当数据插入到某个表时,我收到错误消息 该字段的数据类型为Varchar(20),插入的数据具有最大值 数据长度为6 我不明白问题出在哪里。虽然我可以通过添加 SET ANSI_WARNINGS OFF 但这将是一个解决办法,而不是一个解决方案: 看起来您的列模式名maxlength属性更小然后是要插入的值 根据数据更新列长度 ALTER TABLE Temp ALTER COLUMN SchemaName VARCHAR(XXXX) 目标表不足以容纳要插入的数据。看起来您的目标大小应该是va

当数据插入到某个表时,我收到错误消息

该字段的数据类型为
Varchar(20)
,插入的数据具有最大值 数据长度为6

我不明白问题出在哪里。虽然我可以通过添加

SET ANSI_WARNINGS OFF
但这将是一个解决办法,而不是一个解决方案:


看起来您的列模式名maxlength属性更小然后是要插入的值

根据数据更新列长度

ALTER TABLE Temp ALTER COLUMN SchemaName VARCHAR(XXXX)

目标表不足以容纳要插入的数据。看起来您的目标大小应该是varchar(256),但您已经给出了varchar(10)。只需扩展列大小即可解决此问题

运行此DDL

Alter table temp alter column SchemaName varchar(256)

当列的大小小于它们时,会出现此错误。
更新列的大小。

我刚刚找到了此问题的根本原因。 实际上,我正试图将
sysname
数据类型值插入
varchar()

因此,必须指定适当的长度来保存数据类型。

我不明白刚才提到的数据长度是12,所以使用“varchar(256)”sh.Name可能是nVARCHAR?可能是@MatthiasBurger的重复如果您不了解问题,那么至少不要评论。任何人都可以说“字段长度小于插入值”。
sh.name
sysname
的类型,基本上是
nvarchar(128)
,而schemaname类型是
varchar
。这就是问题所在啊你已经找到问题了。。我看到+1-有点提示,sysname基本上是nvarchar(128)