最近,我在一个SQL脚本中遇到了一个问题,一个insert语句(即插入多个行)有一个类型为varchar(10)的列,它插入的数据行正在ints中传递。
但是,当我添加了要插入的新数据行,并在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”转换为数据类型int时,转换失败。
在这种情况下,有人能解释一下SQL的内部工作原理吗?具体地说:
我知道如何解决这个问题,以及如何从一开始就避免这个问题,但我想知道为什么SQL是这样工作的。
发布于 2016-12-09 00:26:22
事情就是这样发生的。当Server运行时,它会遍历行
(1),(2),('Hello')并意识到那里有多个数据类型。因此,它将其转换为具有最高优先级的(int )。
所以你才会犯这个错误。
请参阅有关数据类型优先级的更多信息
https://stackoverflow.com/questions/41051122
复制相似问题