插入的值大于列长度时,插入SQL Server表的值不正确

时间:2018-06-01 11:54:50

标签: sql sql-server sql-server-2017

情况:

我有一个现有的遗留表[dbo]。[Values],它位于SQL Server 2017上。

在此表中,我有3列。

  • int tableid(主键)
  • char(8)code
  • char(7)description

代码和描述都是自定义数据类型,但两者都只是char(8),char(7),没有其他逻辑。

动作

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

没有给出任何错误或警告。

我查看了触发器,约束,策略,表的创建脚本,自定义数据类型。我找不到任何有逻辑说明截断设置值= *

的地方

问题

在将值保存到表中之前,sql server的哪一部分会修改值?

1 个答案:

答案 0 :(得分:4)

如果您还使用了不正确的数据类型并从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这不太可能改变