Alexei Asked: 2018-01-26 05:09:32 +0800 CST2018-01-26 05:09:32 +0800 CST 2018-01-26 05:09:32 +0800 CST 有没有一种有效的方法来查看“字符串或二进制数据将被截断”的原因? 772 这是对这个问题的跟进。它也与Microsoft的此功能请求有关。 然而,许多年过去了,自报道以来有几个主要版本进入市场。 问题: SQL Server 2017 是否提供任何机制来轻松找出此错误的根本原因?还是像大约 9 年前报告该问题时那样难以调查? sql-server sql-server-2017 2 个回答 Voted Best Answer Aaron Bertrand 2018-01-26T05:21:53+08:002018-01-26T05:21:53+08:00 没有任何变化。SQL Server 2017 仍然提供相同的模糊错误消息,并且不提供任何机制来发现有问题的行/列。 当 Connect 停用时,此 Connect 项目有超过 1,600 票(当他们再次移动内容时,Azure 反馈中的新项目未移植): 请修复“字符串或二进制数据将被截断”消息以提供列名 来自微软的最新评论是这样的: 最新更新 - 开发它的开发人员了解创建完整修复程序所涉及的挑战。以不会影响插入或更新性能的方式将有关生成完整错误消息所需的列的信息深入到实际的转换函数可能会很棘手。我们可能会在短期内实现一些廉价的东西,例如记录被截断数据的类型和长度。现在知道这样的修复何时会发布到公开可见的版本还为时过早。 从那时起,这已得到修复(如后来的答案和评论所示)。要获得更详细的信息(从布伦特的帖子中无耻地窃取): SQL Server 2016 SP2 CU6+、2017 CU12+、2019: -- server-level: DBCC TRACEON(460, -1); -- query-level: ... OPTION (QUERYTRACEON 460); SQL Server 2019 -- 2019 adds a database-level option: ALTER DATABASE SCOPED CONFIGURATION SET VERBOSE_TRUNCATION_WARNINGS = ON; 但是,请注意 460,因为此错误仍在审查中。 Alexei 2018-10-26T11:11:10+08:002018-10-26T11:11:10+08:00 正如此 MDSN 博客文章所示,我们的祈祷已得到回应: SQL Server 2019 引入了一条带有附加上下文信息的新消息。 这个错误现在应该更有意义了: 消息 2628,级别 16,状态 1,第 14 行字符串或二进制数据将在表 'DbName.SchemaName.TableName',列 'Col' 中被截断。截断值:'...'。 此外,好消息是,此更改将在 2017 年和 2016 年向后移植: 此新消息也向后移植到 SQL Server 2017 CU12(以及即将推出的 SQL Server 2016 SP2 CU),但不是默认情况下。您需要在会话或服务器级别启用跟踪标志 460 以将消息 ID 8152 替换为 2628。
没有任何变化。SQL Server 2017 仍然提供相同的模糊错误消息,并且不提供任何机制来发现有问题的行/列。当 Connect 停用时,此 Connect 项目有超过 1,600 票(当他们再次移动内容时,Azure 反馈中的新项目未移植):
来自微软的最新评论是这样的:
从那时起,这已得到修复(如后来的答案和评论所示)。要获得更详细的信息(从布伦特的帖子中无耻地窃取):
SQL Server 2016 SP2 CU6+、2017 CU12+、2019:
SQL Server 2019
但是,请注意 460,因为此错误仍在审查中。
正如此 MDSN 博客文章所示,我们的祈祷已得到回应:
这个错误现在应该更有意义了:
此外,好消息是,此更改将在 2017 年和 2016 年向后移植: