情况:
我有一个现有的遗留表[dbo]。[Values],它位于SQL Server 2017上。
在此表中,我有3列。
代码和描述都是自定义数据类型,但两者都只是char(8),char(7),没有其他逻辑。
动作
如果我在此表中插入列代码的插入值大于8个字符,我将*插入该列。
没有给出任何错误或警告。
我查看了触发器,约束,策略,表的创建脚本,自定义数据类型。我找不到任何有逻辑说明截断设置值= *
的地方问题
在将值保存到表中之前,sql server的哪一部分会修改值?
答案 0 :(得分:4)
如果您还使用了不正确的数据类型并从int
获取隐式转换,您会看到这一点。
CREATE TABLE #T(C CHAR(8))
INSERT INTO #T VALUES (1111111111);
SELECT *
FROM #T
解。使用字符串
INSERT INTO #T VALUES ('1111111111');
/*String or binary data would be truncated.*/
legacy behaviour这不太可能改变