【问题标题】:updated statement throw String or binary data would be truncated error更新语句抛出字符串或二进制数据会被截断错误
【发布时间】:2017-03-23 19:28:57
【问题描述】:

更新给我以下错误

消息 8152,级别 16,状态 13,过程 BOM 轮,第 8 行字符串或 二进制数据将被截断。声明已终止。

我的声明如下。 [WHEEL LOOKUP V] 计算字段和[BOM WHEEL]nvarchar(MAX)

UPDATE T1
SET    T1.[BOM WHEEL] = T2.[WHEEL LOOKUP V]    
FROM   [ASSEMBLIES] T1    
       CROSS APPLY (SELECT TOP 1 *
                    FROM   [WHEELS] T2
                    WHERE  T1.[BOM WHEEL PN] = T2.[STOCK NO] ) T2

我该如何解决?

谢谢

【问题讨论】:

  • 查看 [BOM WHEEL] 和 [WHEEL LOOKUP V] 列的定义。如果 [WHEEL LOOKUP V] 比 [BOM WHEEL] 长,那么您就有这个问题。

标签: sql-server tsql


【解决方案1】:

[WHEEL LOOKUP V][BOM WHEEL]长,如果需要支持更长的字符串,增加[BOM WHEEL]的字符限制。

您可以使用以下方法比较 character_maximum_lengthinformation_schema.columns

select * from information_schema.columns
where (table_name = 'ASSEMBLIES' and column_name = 'BOM WHEEL')
   or (table_name = 'WHEELS' and column_name = 'WHEEL LOOKUP V');

或者ASSEMBLIES 表上的触发器试图在目标列太小的表上执行插入/更新操作。

【讨论】:

  • 我做到了,这就是为什么我改为 max nvarchar(MAX)
  • 当我运行你的语句时,它只给了我列名TABLE_CATALOG, TABLE_SCHEMA ...
  • @Joe msdn.microsoft.com/en-us/library/ms188348.aspx 看看CHARACTER_MAXIMUM_LENGTHDATA_TYPE
  • 哦,现在我可以看到 CHARACTER_MAXIMUM_LENGTH =-1 for BOM WHEEL 和 4000 for WHEEL LOOKUP V,我可以先将BOM WHEEL 更改为nvarchar(4000) 可能会有所帮助吗?
  • @Joe ASSEMBLIES 表上有触发器吗?
猜你喜欢
  • 2018-03-28
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多