Sql 字符串或二进制数据将被截断-Msg 8152

Sql 字符串或二进制数据将被截断-Msg 8152,sql,sql-server,Sql,Sql Server,我在更新表中的行时遇到问题。我得到一个错误: 字符串或二进制数据将被截断 然而,我已经仔细检查了被插入数据的长度和列的长度,它们都在参数范围内,所以我不知道是什么导致了它 它只是一个简单的update语句,跨越表中的每一行,如下所示: UPDATE [tblAssets] SET [DepartmentID] = 'B13F3C7B7489'; tblAssets.DepartmentID列是一个字符,所以我不明白怎么可能会出现截断错误 列定义如下: [DepartmentID] [char]

我在更新表中的行时遇到问题。我得到一个错误:

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

然而,我已经仔细检查了被插入数据的长度和列的长度,它们都在参数范围内,所以我不知道是什么导致了它

它只是一个简单的update语句,跨越表中的每一行,如下所示:

UPDATE [tblAssets]
SET [DepartmentID] = 'B13F3C7B7489';
tblAssets.DepartmentID列是一个字符,所以我不明白怎么可能会出现截断错误

列定义如下:

[DepartmentID] [char](20) NULL
我的帐户在服务器上具有管理权限,因此这不是权限问题。我甚至尝试过创建一个变量,并通过select语句从另一个表中加载相应的数据,但这也不起作用

我可以手动将数据剪切粘贴到单个记录中,但它不允许我通过SQL查询执行表中的更新。服务器是MS SQL 2008 R2

  • 这个问题已经解决了。桌上有一个我不知道的触发器。回答如下

我只是想猜测一下,不知何故,您在更新字符串值中偷偷插入了一个unicode或不可见字符:当您尝试使用unicode数据更新常规字符(或varchar)字段时,会收到相同的错误消息。

结果是,表上有一个用于更新的触发器。此触发器未显示在数据库的触发器文件夹中。运行此声明向我展示了他们:

SELECT * FROM sys.triggers WHERE parent_id = object_id('tblAssets')

选择表,打开触发器文件夹,然后右键单击触发器并禁用它,可以使更新正常工作。最初我忽略了表级别的触发器文件夹。

表上有触发器吗?SQL Server发明此错误并不是为了好玩,它确实发生了,您只是没有提供足够的信息来确定在哪里。我仍然认为您应该反复检查触发器。是的,请运行以下查询:
SELECT*FROM sys.triggers其中parent\u id=object\u id('tblAssets')
为什么要查找数据库级触发器?表触发器是特定于表的。因此,您可以在
Tables>下查看表>触发器。首先,我可以手动剪切粘贴数据,这样就表示数据字符串必须有效。我还尝试从department表中加载一个变量,以便数据也得到验证。我知道字符串必须是有效的,所以我非常怀疑它是数据。您应该查看表下的
触发器
文件夹,而不是数据库触发器。每个表都有自己的触发器。@MichaelSuede是的,有。通常在
约束
文件夹之后。是的,我刚刚找到了它们的列表。现在我觉得自己像个白痴。哈哈,这就是这个地方的用途。@MichaelSuede谢谢你的更新:我总是讨厌在这样的问题上找不到正确的答案。。。