当插入的值大于列长度时,插入 SQL 服务器 table 的值不正确

Incorrect value inserted into SQL server table when inserted value is greater than column length

情况:

我有一个现有的遗留 table [dbo]。[Values] 位于 SQL 服务器 2017.

在这个 table 我有 3 列。

代码和描述都是自定义数据类型,但都只是 char (8) 和 char (7),没有额外的逻辑。

动作

如果我插入到此 table 中,其中列代码的插入值大于 8 个字符,我将 * 插入到该列中。

没有给出错误或警告。

我查看了触发器、约束、策略、table 的创建脚本、自定义数据类型。我找不到任何地方有逻辑说 if truncate set value = *

问题

sql 服务器的哪一部分在保存到 table 之前会修改值?

如果您还使用了不正确的数据类型并从 int 获得隐式转换,您就会看到这一点。

CREATE TABLE #T(C CHAR(8))

INSERT INTO #T VALUES (1111111111);

SELECT *
FROM #T

documented behaviour here

解决方案。使用字符串

INSERT INTO #T VALUES ('1111111111');
/*String or binary data would be truncated.*/

这是legacy behaviour,不太可能改变