当插入的值大于列长度时,插入 SQL 服务器 table 的值不正确
Incorrect value inserted into SQL server table when inserted value is greater than column length
情况:
我有一个现有的遗留 table [dbo]。[Values] 位于 SQL 服务器 2017.
在这个 table 我有 3 列。
- int tableid(主键)
- char(8) 代码
- char (7) 描述
代码和描述都是自定义数据类型,但都只是 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
解决方案。使用字符串
INSERT INTO #T VALUES ('1111111111');
/*String or binary data would be truncated.*/
这是legacy behaviour,不太可能改变
情况:
我有一个现有的遗留 table [dbo]。[Values] 位于 SQL 服务器 2017.
在这个 table 我有 3 列。
- int tableid(主键)
- char(8) 代码
- char (7) 描述
代码和描述都是自定义数据类型,但都只是 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
解决方案。使用字符串
INSERT INTO #T VALUES ('1111111111');
/*String or binary data would be truncated.*/
这是legacy behaviour,不太可能改变