【发布时间】:2016-12-09 00:17:10
【问题描述】:
我最近在 SQL 脚本中遇到了一个问题,其中插入语句(插入多行)有一个 varchar(10) 类型的列,并且它插入的数据行是以整数形式传递的。
但是,当我添加要插入的新数据行并在 varchar 列中使用 varchar 时,SQL 尝试将其转换为 int,即使该列的类型为 varchar(10)
这是一个可以在本地运行的示例。
CREATE TABLE dbo.TestTable
(
VarcharColumn varchar(10) NOT NULL
) ON [PRIMARY]
insert into TestTable(VarcharColumn)
Values (1)
当你运行它时,它会很好地插入,SQL 必须在后台默默地将该整数值转换为 varchar。
但是,如果您尝试这样做:
insert into TestTable(VarcharColumn)
Values (1),(2),('Hello')
SQL 会抛出以下错误:
将 varchar 值“Hello”转换为数据时转换失败 输入整数。
在这种情况下,任何人都可以解释一下 SQL 的内部工作原理吗?具体来说:
- 为什么 SQL 允许您将整数插入到 varchar 列中
- 为什么当 SQL 静默转换这些值时,如果它遇到实际的 varchar,它会尝试将其转换为 int。
我首先了解如何解决此问题以及如何避免此问题,但我正在寻找有关 SQL 为何以这种方式工作的解释。
【问题讨论】:
-
要解释什么?您的问题表明您完全了解情况。答案是:SQL Server 就是这样工作的。
-
@GordonLinoff 这不是我问的。我问了两个问题,一个是关于为什么它允许隐式转换(vkp 的文档链接似乎解释了这一点)以及隐式转换如何在具有多行的插入语句中工作。 “这就是它的工作原理”是一个糟糕的、毫无意义的陈述。
标签: sql sql-server